Você está na página 1de 48

Introduo Programao

Conceitos Bsicos de
Orientao a Objetos
2
Tpicos da Aula
Aprenderemos fundamentos do paradigma orientado
a objetos, mas antes veremos o que paradigma
Conceito de paradigma
Diferentes paradigmas na computao
Depois veremos o que orientao a objetos
Conceitos de orientao a objetos
Programao orientada a objetos x Programao imperativa
Estrutura de um programa orientado a objetos em C++
Construtores
Criao de objetos
Exemplo de aplicao orientada a objetos
Paradigmas de Programao
Linguagens de programao so baseadas em
vrios conceitos:
Tipos de dados, variveis e armazenamento, controle,
abstrao de dados, abstrao procedural, sistema de
tipos,etc
Diferentes selees dos conceitos definem o estilo
de programao ou Paradigma
Afeta a forma de pensar em como escrever um programa
A forma como estes conceitos so agrupados em
uma linguagem de programao definem que
paradigma suportado por esta linguagem
Paradigmas de Programao
Podemos encontrar 6 grandes paradigmas
suportados pelas linguagens de programao:
Imperativo
Uso de comandos, variveis e procedimentos
Primeiras linguagens de programao so deste
paradigma
Ex: Fortran, Pascal, C, etc
Orientao a Objetos
Uso de classes, objetos, herana, polimorfismo,
maior abstrao de dados, encapsulamento
(implementao)
Evoluo do paradigma imperativo
Ex: Smalltalk, C++, Eiffel, Java, C#, etc
Paradigmas de Programao
Funcional
Uso de expresses e funes, ausncia de
variveis e comandos
Ex: ML, Haskell
-- Exemplo em Haskell
-- type
factorial :: Integer -> Integer
-- using recursion
factorial 0 = 1
factorial n = n * factorial (n - 1)
Paradigmas de Programao
Lgico
Relaes lgicas entre entradas e sadas,
asseres
Ex: Prolog, Mercury
/* Exemplo em Prolog */
mother_child(trude, sally). /* fato */
father_child(tom, sally).
father_child(tom, erica).
sibling(X, Y) :- parent_child(Z, X), parent_child(Z, Y).
parent_child(X, Y) :- father_child(X, Y). /* clausula*/
parent_child(X, Y) :- mother_child(X, Y).
?- sibling(sally, erica).
Yes
Paradigmas de Programao
Concorrente
Execuo concorrente de processos, abstrao de
controle de sincronizao (inter-processos, acesso
a recursos, etc)
Ex: Occam, Java, Concurrent C, etc
Scripting
Sistema de tipos dinmica, abstrao de
processamento de Strings, suporte a interfaces
grficas
Ex: Python, Java Script, Tcl, HTML
O que Orientao a Objetos?
considerar que tudo um objeto:
Os sistemas so objetos
Os dados manipulados e comunicados entre os
sistemas so objetos
Cada parte de um sistema (sub-sistema) um objeto
Os dispositivos eletrnicos so objetos
A interface com o usurio um objeto, composto de
vrios outros objetos...
8
Objeto
Podemos definir objeto como uma entidade
que possui:
Estado
Caractersticas ou propriedades do objeto
Comportamento
Operaes que o objeto pode realizar
O comportamento pode examinar ou alterar o
estado de um objeto
9
Objeto DVD
Fonte: http://www.amazon.com
O estado atual
do DVD; o que ele
est fazendo...
As operaes que o
DVD pode executar
10
Comportamento
Nmero Saldo
21.342-7 875,32
Crdito
Dbito
Operaes
que uma
conta pode
executar
O estado
atual
da conta
11
Objeto Conta Bancria
Estados do Objeto Conta
Nmero Saldo
21.342-7 875,32
Crdito
Nmero Saldo
21.342-7 875,32
Crdito
Dbito
Crdito(20)
12
Nmero Saldo
21.342-7 875,32
Crdito
Nmero Saldo
21.342-7 895,32
Crdito
Dbito
Comportamento neste caso mudou o estado do
objeto conta
Classe
Classe um agrupamento de objetos que tm
propriedades comuns e podem realizar as
mesmas operaes
uma definio que descreve como objetos
pertencentes classe so estruturados
internamente (quais propriedades e operaes
o objeto possui)
Classe um conceito e o objeto uma
instncia deste conceito
Portanto, podemos ter vrios objetos
pertencentes a mesma classe
13
Classe x Objeto
Nmero Saldo
21.342-7 875,32
Crdito
Nmero Saldo
11.056-x 1000,32
Crdito
Dbito 14
Mltiplos objetos podem ser criados partir da mesma
classe
Nmero Saldo
Crdito
Dbito
Nmero Saldo
21.342-7 875,32
Crdito
Nmero Saldo
875,32
Crdito
Dbito
21.342-7
Classe Conta
Objeto conta1
Objeto conta2
Classe e Tipo
Tipo um conjunto de valores relacionados que
so capazes de realizar as mesmas operaes
Ex: inteiro, caractere, Conta, Banco, etc
Uma classe define um tipo: o tipo cujos
elementos so objetos com as mesmas
propriedades e comportamento
15
Atributo e Mtodo (1)
Atributo representa alguma propriedade do
objeto
O conjunto de atributos de um objeto determina
o estado do objeto
Um atributo pode conter um valor simples tal
como um nmero real ou at outro objeto
Mtodo representa uma operao que um
objeto pode fazer
O conjunto de mtodos de um objeto determina
o comportamento do objeto
16
Nmero Saldo
21.342-7 875,32
Crdito
Dbito
17
Atributo e Mtodo (2)
Atributos
da conta
Comportamento
Mtodos de
uma
conta
Relaes entre Objetos
Geralmente, um software construdo a partir de vrios
objetos (classes) que se relacionam
As relaes de Cliente e Herana so essenciais para
a construo de programas
Classe B Cliente de classe A, se todo objeto de tipo B
contiver informao sobre um ou mais objetos do tipo A
Classe B Herdeira de classe A, se B representa uma
verso especializada de A
Mtodos e os atributos da classe A se tornam, tambm, parte
da classe B
Caractersticas e comportamento de A so passadas para B
18
Relao Cliente
Nmero Saldo
21.342-7 875,32
Crdito
Cria nova Conta
Transferncia
Objeto Banco1
19
Nmero Saldo
21.342-7 875,32
Crdito
Nmero Saldo
21.342-7 895,32
Crdito
Dbito
Objeto do tipo Banco tm vrios objetos do tipo
Conta Banco cliente de Conta
Banco do Brasil
Nome
Conta1
Conta
Conta1
Conta
Conta1
Conta
Objeto Conta1
Relao Herana
20
Classe Poupana uma verso especializada de Conta
Mtodos e atributos so herdados
Classe Conta
Saldo
Crdito
Dbito
Nmero
Saldo
Crdito
Dbito
Nmero J uros
Classe Poupana
Utilizando OO para Desenvolver
Programas
Desenvolvimento de uma
soluo se torna mais fcil
quando quebramos esta soluo
em mdulos gerenciveis
Quando estamos programando,
podemos desenvolver mdulos
separados, onde cada um
responsvel por uma certa parte
da soluo
Programao Modular
OO facilita a programao
modular
Mdulos so as classes e objetos
21
Algumas Consideraes sobre OO
Orientao a Objetos Modularidade
Reusabilidade
Extensibilidade
Classe uma entidade que combina 2 conceitos:
Mdulo e Tipo
Mdulo um conceito sinttico, pois a decomposio do
sistema em mdulos afeta somente a forma como o programa
escrito, no a funcionalidade dele
Tipo um conceito semntico, pois o tipo influencia
diretamente a execuo do sistema, definindo a forma dos
objetos que so criados e manipulados pelo sistema em tempo
de execuo
22
OO e Linguagens de Programao
Linguagens OO tm em objetos e classes seus
elementos fundamentais para construo de programas
Estruturas da linguagem permitem mapeamento direto dos
conceitos de OO
Porm, possvel fazer um programa OO em uma
linguagem no OO
possvel, tambm, fazer um programa que no seja OO em
uma linguagem OO
23
Conceito de Orientao a Objetos
independente da linguagem de
programao
Linguagem C++
Criada por Bjarne Stroustrup em 1983
Pode ser vista quase como uma extenso da linguagem
C para dar suporte a OO
Embora quase tudo escrito em C seja compatvel com C++,
certos comandos podem ter comportamento diferente em C++
D suporte a vrios conceitos de OO:
Classe, Herana,Polimorfismo, Encapsulamento
Ainda oferece suporte a tratamento de excees e tipos
genricos
Sintaxe da linguagem Java foi inspirada em C++
24
Um Programa Imperativo...
Contm
Uma funo principal, por onde comea a
execuo do programa
Vrias funes auxiliares, para modularizar, dividir
o cdigo em partes
Importao de bibliotecas de funes
Pode ainda conter:
Definio de tipos estruturados
26
Um Programa Orientado a Objetos ...
Tem a classe como a sua construo
fundamental :
Um programa constitudo de uma ou mais classes
Que podem ter sido importadas de uma biblioteca
de classes
Uma classe contm um ou mais atributos e mtodos
Um mtodo composto de instrues
Ao Invs de Estruturas, Classes!
Define um tipo,
com funes que
operam sobre
este tipo
Estrutura
Funo 1
Funo 2
Funo 3
Estrutura
Funo 1
Funo 2
Funo 3
Classe
Programao Imperativa x
Programao OO
Programao Imperativa tem como elementos
principais os procedimentos (funes)
Programao OO tem como elementos
principais as classes
Estrutura + funes = classe
Programao OO ainda utiliza :
Herana
Encapsulamento
Polimorfismo
28
Veremos depois!
Implementando o Tipo Conta com
Programao Imperativa
Primeiro passo definir um tipo estruturado
Conta
29
struct Conta{
double saldo;
char numero[11];
char agencia[11];
};
Implementando as Funes do Tipo
Conta
Depois se define as funes que operam sobre
o tipo Conta
creditar
debitar
getSaldo
criaConta
30
void creditar(struct Conta *c ,double v){
c->saldo = c->saldo + v;
}
Passa-se estrutura (ou endereo
de estrutura) como parmetro
Implementando as Funes do Tipo
Conta
31
void debitar(struct Conta *c,double v){
if (v <= c->saldo)
c->saldo = c->saldo - v;
}
double getSaldo(struct Conta *c){
return c->saldo;
}
Implementando as Funes do Tipo
Conta
32
struct Conta* criaConta(char *num, char* ag) {
struct Conta *retorno;
retorno = (struct Conta *)
malloc (sizeof(struct Conta));
if (retorno == NULL){
printf(Erro na alocao de memria!)
} else {
strcpy(retorno->numero, num);
strcpy(retorno->agencia, ag);
retorno->saldo = 0;
}
return retorno;
}
Alocando dinamicamente uma
estrutura
Usando o Tipo Conta em Programao
Imperativa
33
int main() {
struct Conta *conta1;
conta1 = criaConta(1234-5,007-x);
if (conta1 == NULL){
printf(Erro na alocao de memria!)
} else {
creditar(conta1,300);
printf(Saldo da conta = %lf\n,getSaldo(conta1));
debitar(conta1,200);
printf(Saldo da conta = %lf\n,getSaldo(conta1));
}
return 0;
}
Implementando o Tipo Conta com
Programao OO (C++)
Primeiro passo definir a classe Conta
Atributos e Mtodos
34
class Conta{
private:
double saldo;
char numero[11];
char agencia[11];
public:
void creditar(double v);
void debitar(double v);
double getSaldo();
Conta(char* num, char* ag);
};
Atributos
Mtodos
Construtor
Implementando os Mtodos do Tipo
Conta
35
void Conta::creditar(double v){
saldo = saldo + v;
}
Indica que mtodo faz parte da
classe Conta
No precisa passar
objeto como parmetro!
saldo um atributo que foi
definido na classe Conta
Implementando os Mtodos do Tipo
Conta
36
void Conta::debitar(double v){
if (v <= saldo)
saldo = saldo - v;
}
double Conta::getSaldo(){
return saldo;
}
Construtor
Tipo especial de mtodo que chamado no ato de
criao de um objeto da classe desejada
Importante para fazer algumas inicializaes no objeto
Uma classe pode ter mais de um construtor
O que diferencia um construtor do outro a ordem e/ou tipo
e/ou quantidade de parmetros
Em C++, deve ter o mesmo nome da classe
No possui tipo de retorno
No obrigatrio definir um construtor
Existe em C++ um construtor default sem parmetros
37
Implementando o Construtor do Tipo
Conta
38
Conta::Conta(char *num, char* ag) {
strcpy(numero, num);
strcpy(agencia, ag);
saldo = 0;
}
Usando o Tipo Conta em Programao
OO
39
#include <iostream>
using namespace std;
int main() {
Conta *c;
c = new Conta(1234-5,007-x);
if (c == NULL){
printf(Erro na criao do objeto!)
} else {
c->creditar(300);
cout<<"Conta tem saldo = " << c->getSaldo() << endl;
c->debitar(200);
cout<<"Conta tem saldo = " << c->getSaldo() << endl;
}
return 0;
}
Comando para criar objeto de
uma classe em tempo de
execuo (dinamicamente)
Para chamar mtodo a partir de
uma referncia para um objeto
Comando para
imprimir na
tela
40
Criao Dinmica de Objetos
Em linguagens OO, escrevemos programas
utilizando objetos
Mas, primeiro, temos que cri-los...
Para criar um objeto em C++ dinamicamente
utilizamos o comando new
new Conta(...);
Palavra
reservada
ordenando a
criao
de um objeto
Construtor do
objeto a ser
criado
Avaliao do operador new
Cria um objeto da classe NomeDaClasse e
armazena na sua memria
Inicializa os atributos deste objeto usando o
construtor desta classe
Devolve como resultado da avaliao uma referncia
(endereo da memria) para o objeto criado
Para avaliar uma expresso do tipo
new NomeDaClasse();
o computador...
41
Criando um objeto dinamicamente...
new Conta(12-3,11-2);
4. Devolve o endereo
como resultado da avaliao
42
1. Cria o objeto
na memria
2. Inicializa o
objeto
12-3 11-2
id275
3. Associa um
endereo ao
objeto
12-3 11-2
Construtores e new
new NomeDaClasse(argumentos)
O nmero, ordem e tipos
dos argumentos
determina o construtor
43
Podemos ter mais de um construtor para um
determinado objeto
A escolha do construtor para inicializar os atributos
determinada pela lista de argumentos, entre
parnteses
Referncias para objetos
A referncia funciona
como a identidade do objeto
O objeto
id305
A referncia
para o objeto
44
Todo acesso e manipulao feito indiretamente,
atravs de uma referncia (endereo) para o objeto
Quando declaramos uma varivel do tipo de um
determinado objeto, ela no armazena o objeto e sim
uma referncia para um objeto daquele tipo
Conta* conta1 = new Conta(12-3,11-2);
conta1 armazena
este valor
Referncias e identidade de um objeto
id305
id309
id312
Objetos diferentes,
mas com o mesmo
contedo (clones)
Referncias
diferentes
objetos
diferentes
45
12-3 11-2
12-3 11-2
11-5 12-4
46
Consideraes sobre Criao de
Objetos
Os valores dos atributos (estado) de um
objeto podem mudar durante a execuo de
um programa, mas isso no afeta a
identidade do objeto
O ato de criar um objeto chamado de
instanciar um objeto de uma determinada
classe
47
Criao Esttica de Objetos
C++ permite tambm a criao esttica (em tempo
de compilao) de objetos
No ato da declarao de uma varivel do tipo de uma
classe, objeto criado
Na declarao deve-se passar argumentos do construtor
Conta c(12-3,11-2);
Tipo da
varivel c
Conta
Argumentos do
construtor
Usando Criao Esttica de Objetos do
Tipo Conta
48
#include <iostream>
using namespace std;
int main() {
Conta c(1234-5,007-x);
c.creditar(300);
cout<<"Conta tem saldo = " << c.getSaldo() << endl;
c.debitar(200);
cout<<"Conta tem saldo = " << c.getSaldo() << endl;
return 0;
}
Declarao para instanciar
objeto em tempo de compilao
Utiliza-se operador . para
utilizar os mtodos do objeto
criado estaticamente

Você também pode gostar