Você está na página 1de 39

PCS3111

Laboratrio de Programao
Orientada a Objetos para
Engenharia Eltrica

Aula 3: Conceitos Bsicos de OO

Escola Politcnica da Universidade de So Paulo


Agenda
1. Modularizao e Abstrao
2. Tipos Abstratos de Dados
3. Conceitos Bsicos de OO
4. Programao OO em C++
5. Referncia para o Objeto Atual
6. Mtodos com Parmetros

PCS / EP / USP 2017 PCS 3111 Aula 3 2


Modularizao e Abstrao

PCS / EP / USP 2017 PCS 3111 Aula 3 3


Questes Tpicas
O que caracteriza um bom projeto de software?
Uma boa organizao do software
Qual a estratgia para essa organizao?
Modularizao do software
Existem princpios que ajudam na
modularizao do software?
Abstrao
Como deve ser um software?
Reusvel
Extensvel

PCS / EP / USP 2017 PCS 3111 Aula 3 4


Questes Tpicas
Quais so os benefcios desses princpios na
modularizao do software?
Facilidade de construo do software
Facilidade de teste e depurao do software
Facilidade de modificao do software
Legibilidade do software
Facilidade de comunicao entre os desenvolvedores
Menor time-to-market

PCS / EP / USP 2017 PCS 3111 Aula 3 5


Modularizao do Software
Quebra a soluo de software em mdulos
Cada mdulo pode ser implementado e
compilado independentemente
Os mdulos podem ser ligados (linked)
formando a soluo completa
Permite isolar os erros cometidos e eliminar
redundncias
Torna o desenvolvimento do software
gerencivel

PCS / EP / USP 2017 PCS 3111 Aula 3 6


Abstrao
Torna visveis somente detalhes do mdulo que
interessam

PC

PC visto com Placa Me, Placas de


Vdeo, Placa de Rede, Placa de
Som, Placa de Memria

Placa vista com Circuitos


Integrados, Resistores,
PCS / EP / USP 2017 PCS 3111 Aula 3 Capacitores 7
Abstrao
Uma soluo modular pode ter muitos nveis de
abstrao
Abstrao procedimental: a ao de mudar a
temperatura do ar condicionado pode ter uma
sequncia de passos procedimentais. Por exemplo:
Pegue o controle remoto
Escolha a temperatura
Ative a temperatura escolhida

PCS / EP / USP 2017 PCS 3111 Aula 3 8


Abstrao
Uma soluo modular pode ter muitos nveis de
abstrao
Abstrao de dados: equipamento pode ser
caracterizado por outros dados. Por exemplo:
Fabricante
No. de srie
Modelo
Ano

PCS / EP / USP 2017 PCS 3111 Aula 3 9


Tipos Abstratos de Dados

PCS / EP / USP 2017 PCS 3111 Aula 3 10


Tipo de Dados
Conjunto de valores que uma varivel pode
assumir em uma dada linguagem de
programao. Por exemplo, em C++:
int i = 1234;
char a = A;
bool flag = true;

PCS / EP / USP 2017 PCS 3111 Aula 3 11


Tipos de Dados
Exemplo: Inteiros (Integer)
Operadores: Operadores sobre
Aritmticos Unrios (+; -) Inteiros encapsulam
nmeros inteiros
Ex: +5 resulta 5
Ex: -8 resulta -8
Aritmticos Binrios (+; -; *; /; %)
Ex: 2 + 3 resulta 5
Ex: 8 % 3 resulta 2 (resto)
Relacionais (==; !=; <; <=; >; >=)
Ex: a != b resulta true se a diferente de b, caso
contrrio, false.
Ex: a > b resulta true se a maior do que b, caso
contrrio, false.

PCS / EP / USP 2017 PCS 3111 Aula 3 12


Tipo Abstrato de Dados (TAD)
um conceito central de design de programa,
sobretudo na abordagem OO
independente de linguagem especfica de
programao
Incorpora princpios de modularizao de
software
Encapsula uma coleo de dados e um conjunto
de operaes sobre esses dados
Pode ter vrias implementaes diferentes

PCS / EP / USP 2017 PCS 3111 Aula 3 13


Tipo Abstrato de Dados (TAD)

Ar Condicionado
Residencial

Painel de
Controle

Min, Max

Ventilador

Aquecedor

Refrigerador

PCS / EP / USP 2017 PCS 3111 Aula 3 14


Contrato (Especificao) de um TAD

Importante:
O Contrato no
TAD nome_TAD especifica a
representao
Dados
dos dados e nem
[Descreve a estrutura de dados] os algoritmos que
Operaes implementam as
Operao 1 operaes
Entrada: [Dados vindos do cliente]
Pr-condies: [Estado (condio) necessrio(a) do sistema antes de executar a operao]
Processo: [Aes executadas com os dados]
Sada: [Dados retornados para o cliente]
Ps-condies: [Estado do sistema depois de executar a operao]

Operao 2 ...

Operao n ...
Fim TAD nome_TAD
( Adaptado de Ford e Topp, 1996)
PCS / EP / USP 2017 PCS 3111 Aula 3 15
Exemplo: Contrato do TAD Sensor

TAD Sensor
Dados
Um nmero real no negativo que especifica o cdigo do sensor.
Um valor booleano que indica o estado do sensor.
Operaes
Ativao
Entrada: Cdigo do sensor.
Pr-condies: Nenhuma.
Processo: Ativar sensor.
Sada: Nenhuma.
Ps-condies: Sensor Ativado.
Leitura
Entrada: Cdigo do sensor.
Pr-condies: Nenhuma.
Processo: Ler estado do sensor.
Sada: Retorna estado do sensor.
Ps-condies: Nenhuma.

Fim TAD Sensor


PCS / EP / USP 2017 PCS 3111 Aula 3 16
Conceitos Bsicos de OO

PCS / EP / USP 2017 PCS 3111 Aula 3 17


Conceitos Bsicos
Classe
Implementa um tipo abstrato de dados
Representa as caractersticas comuns a um conjunto
de objetos
Abstrao
A classe um molde de objetos daquele tipo

Quais so os comportamentos comuns


aos objetos?
Quais so os possveis estados dos
objetos?
Classe conta corrente

PCS / EP / USP 2017 PCS 3111 Aula 3 18


Conceitos Bsicos
Objeto
Objeto uma instncia de uma classe
Elemento do sistema computacional
Prov servios
Caractersticas
Comportamento, estado e identidade (unicidade)
Exemplo: sistema bancrio
Comportamento
Depositar, retirar e transferir
Estado
Saldo atual e limite pr-aprovado
Conta corrente
Identidade*
Banco 000 Agncia 1234 CC 12345678

PCS / EP / USP 2017 PCS 3111 Aula 3 19


Conceitos Bsicos
Atributo
Propriedades de uma classe
Representa os estados
Cada objeto tem um valor diferente para cada atributo
Operao
Servios disponibilizados por objetos de uma
determinada classe
O que o objeto pode fazer?
Podem mudar o estado do objeto
Mtodo
A implementao de uma operao

PCS / EP / USP 2017 PCS 3111 Aula 3 20


Classe como TAD
Uma Classe definida pelo usurio implementa
um TAD em C++

Classe
Privado
Dados membros: valor 1, valor 2... Encapsulamento
Operaes internas

Pblico

Operao 1
Operao 2 Interface de Acesso

(Adaptado de Ford e Topp, 1996)


PCS / EP / USP 2017 PCS 3111 Aula 3 21
Exemplo em C++

Classe Sensor
Privado 1 class Sensor {
Estado 2 private:
3 bool ativado;
4 public:
Pblico 5 void ativarSensor() {
6 ativado = true;
Ativao 7 }
Leitura 8 bool isAtivado() {
9 return ativado;
10 }
11 };

PCS / EP / USP 2017 PCS 3111 Aula 3 22


Programao OO em C++

PCS / EP / USP 2017 PCS 3111 Aula 3 23


Programao OO em C++
C++ uma linguagem multiparadigma
Procedural, Estruturada e OO
Exemplo de OO em C++
1 #include <iostream> EX01
2 using namespace std;
3 Classe
4 class Lampada {
5 public:
6 bool acesa = false; Atributo
Definio da 7 void ligar();
classe 8 void desligar(); Mtodos
9 void imprimir();
10 };

24 int main() {
25 Lampada *l1 = new Lampada;
26 Lampada *l2 = new Lampada;
PCS / EP / USP 2017 PCS 3111 Aula 3 24
Programao OO em C++
Lampada uma classe (o tipo de varivel)
l1 e l2 so objetos (ou instncias) da classe Lampada
Cada objeto da classe Lampada possui um valor para o
atributo acesa
No incio, a lmpada est apagada (acesa = false)
Cada Lampada possui mtodos ligar, desligar e
imprimir
Em C++, mtodo == funo-membro
(Veremos o significado de public na Aula 4)

Mas como os mtodos funcionam?

PCS / EP / USP 2017 PCS 3111 Aula 3 25


Programao OO em C++
1 #include <iostream> EX01
2 using namespace std;
3
4 class Lampada {
5 public:
6 bool acesa = false;
Definio
7 void ligar();
da classe
8 void desligar();
9 void imprimir(); Operador de
10 }; resoluo de
11 escopo
12 void Lampada::ligar() {
13 this->acesa = true;
14 }
15
16 void Lampada::desligar() {
17 this->acesa = false; Implementao
18 } da classe
19
20 void Lampada::imprimir() {
21 cout << this->acesa << endl;
222017
PCS / EP / USP } PCS 3111 Aula 3 26
Programao OO em C++
Como usar os objetos?
Como executar mtodos para um objeto?
Para qual objeto queremos executar o mtodo?
->": operador de acesso a um membro da classe
24 int main() { EX01 Sada:
25 Lampada *l1 = new Lampada;
26 Lampada *l2 = new Lampada; 0
Chamando os 27 l1->imprimir(); 1
28 l1->ligar();
mtodos para 1
29 l1->imprimir();
l1 0
30
31 l2->ligar();
Chamando os
32 l2->imprimir();
mtodos para
33 l2->desligar();
l2
34 l2->imprimir();
35
36 }

PCS / EP / USP 2017 PCS 3111 Aula 3 27


Programao OO em C++
C++ separa a definio da classe de sua
implementao
Um programa C++ pode ser dividido em vrios mdulos
Mdulos podem ser compilados separadamente
Geram "arquivos objetos" (lampada.o ou lampada.obj)
Mdulos podem ser ligados entre si gerando o
executvel
(Em outras linguagens OO isso pode ser diferente)

Vantagem: diminuio do tempo de compilao


(Mais detalhes em uma aula futura)
PCS / EP / USP 2017 PCS 3111 Aula 3 28
Convenes
Nome da classe: substantivo e singular
Representa um conceito
Conveno de nomes: upper CamelCase
Exemplo: ContaCorrente, Pedido, Lampada
Nome do atributo: substantivo ou verbos
representando estado
Conveno de nomes: lower CamelCase
Exemplo: nome, id, telefone, preco, isAtivo, cancelado,
processandoPedido
Nome do mtodo: verbo (em geral infinitivo)
Conveno de nomes: lower CamelCase
Exemplo: retirar, adicionarProduto, alugar,
embaralhar

PCS / EP / USP 2017 PCS 3111 Aula 3 29


Exemplo: Classe Vetor2d
Classe Vetor2d
Representa vetores em um plano
1 #include <iostream> EX02 14
2 15 int main() {
3 using namespace std; 16 Vetor2d *v = new Vetor2d;
4 17 v->x=1;
5 class Vetor2d { 18 v->y=2;
6 public: 19 v->imprimir();
7 float x,y; 20 }
8 void imprimir(); 21
9 };
10 Sada:
11 void Vetor2d::imprimir() {
12 cout << "(" << x << ", " << y << (1,2)
")" << endl;
13 }

PCS / EP / USP 2017 PCS 3111 Aula 3 30


Exemplo: Classe Vetor2d
Mtodo para inverter o sentido do vetor: inverter
1 #include <iostream> EX03 16 Vetor2d* Vetor2d::inverter() {
2 17 Vetor2d *k = new Vetor2d;
3 using namespace std; 18 k->x=-x;
4 19 k->y=-y;
5 class Vetor2d { 20 return k;
6 public: 21 }
7 float x,y; 22
8 void imprimir(); 23 int main() {
9 Vetor2d* inverter(); 24 Vetor2d *v = new Vetor2d;
10 }; 25 v->x=1;
11 26 v->y=2;
12 void Vetor2d::imprimir() { 27 v->imprimir();
13 cout << "(" << x << ", " << y 28 Vetor2d *w = v->inverter();
<< ")" << endl; 29 w->imprimir();
14 } 30 }
15
Sada:

(1, 2)
PCS / EP / USP 2017 PCS 3111 Aula 3 (-1, -2) 31
Referncia para o Objeto Atual

PCS / EP / USP 2017 PCS 3111 Aula 3 32


Referncia para o Objeto Atual
Como referenciar o objeto atual? Exemplo:
1 #include <iostream> EX04 20 void Lampada::imprimirEDesligar()
2 using namespace std; {
3
21 ????; Como passar a
4 class Lampada {
24 } lmpada atual?
5 public:
25 int main() {
6 bool acesa = false;
26 Lampada *l1 = new Lampada;
7 void ligar();
27 l1->ligar();
8 void desligar();
28 Lampada *l2 = new Lampada;
9 void imprimirEDesligar();
29 l1->imprimirEDesligar();
10 };
30 l2->imprimirEDesligar();
11
31 }
12 void Lampada::ligar() {
13 acesa = true;
14 } Sada:
15
16 void Lampada::desligar() { 1
17 acesa = false; 0
18 } 0
19 PCS / EP / USP 2017 PCS 3111 Aula 3 0 33
Referncia para o Objeto Atual
Palavra reservada this
Referncia para o objeto atual
O objeto que foi chamado para executar o mtodo
Pode ser usado para acessar membros do objeto
Exemplo:

Acesso ao atributo acesa


20 void Lampada::imprimirEDesligar() { EX04
21 cout << this->acesa << endl;
22 desligar();
23 cout << this->acesa << endl;
24 }

Chamada ao mtodo desligar

PCS / EP / USP 2017 PCS 3111 Aula 3 34


Mtodos com Parmetros

PCS / EP / USP 2017 PCS 3111 Aula 3 35


Mtodos com Parmetros
Mtodos com parmetros
produtoEscalar: Produto escalar entre dois vetores
produtoPorUmReal: Produto de um vetor com um
nmero real

PCS / EP / USP 2017 PCS 3111 Aula 3 36


Mtodos com Parmetros
1 #include <iostream> EX05
2 #include <math.h>
3
4 using namespace std;
5
6 class Vetor2d {
7 public:
8 float x, y;
9 void imprimir();
10 float produtoEscalar(Vetor2d *b);
11 Vetor2d produtoPorUmReal(float f);
12 };
13
14 void Vetor2d::imprimir() {
15 cout << "(" << x << ", " << y << ")" << endl;
16 }
17
18 float Vetor2d::produtoEscalar(Vetor2d *b) {
19 return x*b->x + y*b->y;
20 }
21
PCS / EP / USP 2017 PCS 3111 Aula 3 37
Mtodos com Parmetros
22 Vetor2d Vetor2d::produtoPorUmReal(float f) { EX05
23 Vetor2d *k = new Vetor2d;
24 k->x=x*f;
25 k->y=y*f;
26 return *k;
27 }
28
29 int main() { Sada:
30 Vetor2d *v = new Vetor2d;
31 Vetor2d *w = new Vetor2d; -3
(2,4)
32 v->x=1;
33 v->y=2;
34 w->x=1;
35 w->y=-2;
36 cout << v->produtoEscalar(w) << endl;
37 Vetor2d *u = new Vetor2d;
38 *u = v->produtoPorUmReal(2);
39 u->imprimir();
40 }
41
PCS / EP / USP 2017 PCS 3111 Aula 3 38
Bibliografia
BUDD, T. An Introduction to Object-Oriented
Programming. 3rd Edition. Addison-Wesley.
2001. Cap. 1 e 4.
LAFORE, R. Object-Oriented Programming in
C++. 4th Edition. SAMS. 2002. Cap. 6.

PCS / EP / USP 2017 PCS 3111 Aula 3 39

Você também pode gostar