Escolar Documentos
Profissional Documentos
Cultura Documentos
SUMRIO
Motivao. Noes Histricas. Conceitos: Objetos, classes, mtodos, herana e polimorfismo. Exemplo
MOTIVAO
Objetivo da POO
Diminuir o tempo de desenvolvimento Escrever cdigos que facilite a manuteno Manter a qualidade
NOES HISTRICA
Anos 60, linguagem SMULA-67, primeiros conceitos. Anos 70, SMALLTALK, primeira linguagem orientada ao objeto. Anos 80, a linguagem C - tornou-se popular. Fim dos anos 80: - Linguagens: C#, C++, JAVA, Delphi e outras. - Paradigmas da POO sem a necessidade de investimento em novas linguagens e novos ambientes.
Conceitos
Conceitos
Jos
Maria Joo
Jonas
Nome da Classe
CLASSE
Aes possveis da classe (mtodos) Protocolo o conjunto de mtodos implementados por uma classe (interface).
A classe define um tipo de objeto. Ex: a Classe Forno define os fornos de fundies. O objeto uma instncia da classe, ou seja o objeto, definido por uma classe, possui atributos especficos inerentes a sua caracterstica. O objeto encapsula os seus atributos e mtodos. Facilita a manuteno do sistema, pois os efeitos colaterais das modificaes esto enclausurados no objeto. Facilita as realizaes de testes isolados, pois a classe independente do sistema.
Ponteiro para o topo da pilha Cria as condies iniciais necessrias para o bom funcionamento da classe . Finaliza a classe (libera espao na memria)
Classe Criao do Objeto Pilha Utilizao: Cpilha Pilha; Pilha.Insere(5); O usurio da classe no precisa conhecer os detalhes de implementao da classe (encapsulamento dos dados)
mtodos
classe nome_da_classe { mtodos privado: tipo variveis; Atributos tipo nome_mtodo(lista de parmetros); Mtodo .. publico: destrutor_da_classe(void); Destrutor Construtor_da_classe(lista de parmetros); Construtor tipo nome_mtodo(lista de parmetros); Mtodo .. }; privado - atributos ou mtodos que no podem ser acessados por outras rotinas externas a classe. publico - atributos ou mtodos que podem ser acessados por qualquer rotina externa a classe.
Utilizao
Exerccio
Implemente a classe Cpilha, considerando as seguintes caractersticas: Utilize um vetor de inteiros de 10 posies para armazenar os elementos na pilha. Utilize um ndice para controlar os armazenamentos na pilha, se ndice for igual a -1 significa que a pilha est vazia, caso o ndice for 9 significa que a pilha est cheia, portanto no h mais espao no vetor para armazenar elementos. Implemente o mtodo insere elemento, o mtodo remove elemento e tudo que for necessrio para garantir o bom funcionamento da classe Cpilha.
CABEA
BRAO
CORPO
PERNA
PERNA
PESSOA
Exerccios
Construa e teste a classe dos nmeros complexos. Implemente os seguintes mtodos e os demais que forem necessrios para garantir o bom funcionamento da classe dos nmeros complexos: Soma de nmeros complexos. Subtrao de nmeros complexos. Multiplicao de nmeros complexos. Magnetude do nmero complexo. |a+bi| = sqrt(a*a+b*b) ngulo do nmero complexo. atan2(Im,Re); Coordenada polar do nmero complexo void coord_polar(double mag, double ang) Re = magnetude * cos(ngulo); IM = magnetude * sin(ngulo);
Exerccios
Construa e teste a classe do tipo de dado vetor de nmeros complexos.
HERANA
PESSOA
Genrico
Cliente
fornecedor
compra
vende
Hierarquia de classes
HERANA
Vantagens obtidas pela herana: O reaproveitamento do cdigo agiliza o desenvolvimento do sistema sem alterar a sua qualidade e evita erros de programao. Facilita a expansibilidade do sistema, ou seja, com pequenos ajustes o sistema cresce facilmente sem que haja a necessidade de alterao da programao.
POLIMORFISMO
Polimorfismo quer dizer vrias formas. Uma nica forma para acessar vrios mtodos, que possuem diferentes implementaes. O polimorfismo nos possibilita maior abstrao no desenvolvimento de um sistema. Uma funo que desenhe uma figura geomtrica, etc....
EXEMPLO DE POLIMORFISMO
FIGURA COORDENADAS DESENHAR APAGAR DESLOCAR
CRCULO RAIO
DESENHAR
publico:
};
Herana em C++
Mtodo_de_acesso
privado protegido pblico
Herana de Classe
class pai { private: int d1; int m1(); protected: int d2; int m2(); public: pai(); int d3; int m3(); }; pai::pai(){ d1=1; class f1 : private pai { int f1 :: m4() d2=2; { private: d3=3; return (1); int d4; } }; int m4(); int pai :: m1(){ int f1 :: m5() protected: return (d1); { int d5; }; return (1); int m5(); int pai :: m2(){ }; public: return (d2); int f1 :: m6() int d6; }; { int m6(); int pai :: m3() return (1); }; { }; return (d3); };
Detalhes de Implementao
int funo(int p) { return p * 3; } char funo(char p) { return p + 3; } int funo(int p,char* s) { return p * strlen(s); }
Sobrecarga de Funes
Construtor e Destrutor
class pai { protected: int d2; int m2(); public: pai(){ d2 = 0; }; pai(int a){ d2=a; }; }; class f2 : public f1 { public: ~f2(){ d4 = 0; } f2():f1(1){ d4 = 4;}; f2(int a):f1(a), d9(a) { d7= 5; }; int d9; }; f2 filho1(5); Considerando f1(int a) a ordem de execuo : 1.pai(int a); 2.f1(a); 3.d9(a); 4.D7=5;
class f1 : public pai { public: ~f1(){ d4 = 0; } f1():pai(1){ d4 = 4;}; f1(int a):pai(a), d6(a) { d7= 5; }; int m6(); int d6; int d7; int d4; };
Sobrecarga de Operadores
void CPilha::operator + (double elemento) { struct Tpilha *p; p = new (struct Tpilha); p->Elemento = elemento; p->Proximo = topo; topo = p; }
CPilha Pilha, *p = new CPilha; double a; Pilha.Insere(8); Pilha + 9; a = Pilha.Remover(); cout << a << endl; a = Pilha.Remover(); cout << a << endl;
Templates
void troca(int& x, int& y) { int tmp = x; x = y; y = tmp; }
template <class T> T maior (T a, T b) No programa principal { float x =9, y=10.5; T result; troca <float> (x, y); result = (a>b)? a : b; cout << x << endl; return (result); cout << maior <float>(x,y) << endl; } // Qual o resultado do processamento ?
cdigo
Exerccios
Construa e teste a classe dos nmeros complexos. Implemente os seguintes mtodos e os demais que forem necessrios para garantir o bom funcionamento da classe dos nmeros complexos: Soma de nmeros complexos . (a+bi) + (c+di)= (a+c)+(b+d)i Subtrao de nmeros complexos. (a+bi) - (c+di)= (a-c)+(b-d)i Magnetude do nmero complexo. |a+bi| = sqrt(a*a+b*b)
Mtodo Virtual
Um mtodo virtual permite a sua redefinio nas classes herdeira. A diferena notada quando se utiliza ponteiro.
Funes amigas
Fornece o acesso aos dados privados e protegido de uma classe
class testaamigo { friend int testa(testaamigo ta); private: int I; public: testaamigo() {I = 0;}; void altere(int a){ I=a;}; int m1() {return 1;}; };
int main(int argc, char *argv[]) { testaamigo tf; tf.altere(4); cout<< testa(tf) << endl; system("PAUSE"); return EXIT_SUCCESS; }
static
Compartilha uma mesma regio de memria:
}; int conta::contagem =0; Exemplo de uso: conta a,b; a.imprime(); b.altera(5); a.imprime(); conta::altera(10); b.imprime();
Resposta do processamento: 2 5 10
1. Definir os objetos principais que compem o sistema. 2. Definir os atributos dos objeto. 3. Definir os objetos secundrios e os seus atributos. 4. Estruturar a hierarquia de classes que representem os objetos da soluo. 5. desenvolver as interfaces dos objetos. 6. Desenvolver uma seqncia inicial de expresses que represente uma soluo de alto nvel para o problema. 7. Implementar os mtodos que representem todas as mensagens. 8. Refinar o projeto.
Funes, procedimentos e Mtodos subrotinas Chamadas de funes ou Mensagens de procedimentos Tipo de dado abstrato Classe Inexistente Hereditariedade
Em POO o problema decomposto em vrios objetos e cada objeto encapsula as suas variveis e mtodos, o que facilita a manuteno e teste. Em POO toda a programao voltada para a produo de componentes de software (classe) reutilizveis.
Reutilizao de cdigos
Hereditariedade
Comandos pr-existentes escritos, testados e depurados Modularidade de informao Reusabilidade por meio de hereditariedade e polimorfismo
Ex: Biblioteca para a construo de interfaces grficas. - Maior qualidade - Menor tempo de desenvolvimento
Lista de exerccios
1. O que classe ? Quais as vantagens obtidas com a utilizao de classes? 2. O que herana ? Quais as vantagens obtidas com a utilizao da herana? 3. O que polimorfismo? cite dois exemplos prticos. 4. Explique com suas palavras o que um mtodo virtual, cite um exemplo. 5. O que dado privado, protegido e pblico ? 6. Na implementao da herana de classes, em C++, quais so os tipos de acesso aos dados e mtodos da classe base? Explique as suas diferenas. 7. Defina construtores e destrutores. De um exemplo de cada um C++.
Lista de exerccios
8. Utilizando programao orientada ao objeto, implemente uma fila utilizando alocao dinmica de memria. O primeiro que entra o primeiro que sai. os mtodos a serem implementados so insere, remove Obs: a fila armazena nmeros inteiros insere utilizando o ponteiro fim e remove pelo ponteiro incio fim incio
Lista de exerccios
9. Considerando o exerccio anterior (nmero 8) e utilizando o conceito de herana, implemente uma nova classe que possua os seguintes mtodo: ordena, insere ordenado, remova um determinado elemento desta classe. Obs: no remover, caso no haja elemento o mtodo retorna 0 caso o elemento for removido com sucesso este mtodo deve retornar 1, e o elemento do tipo inteiro que foi removido.
Bibliografia
JACOBSON, I.; JONSSON, m. C. P.; VERGAARD; G. Object - Oriented Software Engineering. A Use Case Driven Approach. ADDISON-WESLEY PUBLISHING. 1993. Manuais do BORLAND C + +. PRICE, A.M. A. Extenso dos paradigmas Logico e funcional a objetos. XIV Congresso da Sociedade Brasileira de computao. XIII Jornada de Atualizao em Informtica, Caxambu -MG, Brasil 1994. WIENER, R. S.; PINSON, L.J. Programao Orientada para Objeto e C + +. So Paulo: Makron Books, McGraw-Hill, 1991. WIENER, R. S.; PINSON, L.J. Programao Orientada para Objeto, Manual Prtico e Profissional. So Paulo: Makron Books, McGraw-Hill, 1991. WINBLAD, Ann L. W.; EDWARDS, Samuel D.; KING, David R. Software Orientado ao Objeto. So Paulo: Makron Books, 1993. Material pesquisado na Internet.