24
Aula POO 1 Programação Orientada a Objetos Bach. Sistemas de Informação Prof: Mai-Ly Vanessa Disciplina: Programação II

Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Embed Size (px)

Citation preview

Page 1: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 1

Programação Orientada a Objetos

Bach. Sistemas de InformaçãoProf: Mai-Ly VanessaDisciplina: Programação II

Page 2: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 2

Breve Histórico da Evolução das Linguagens de Programação

Linguagens de Prog. tem mudado muito ao longo do tempo.

Longa viagem

Anos 60: Programação Estruturada Possível escrever programas moderadamente

complexos de forma relativamente fácil. Projetos grandes = difícil e custoso fazer

manutenção e qualquer modificação. Cada marco no desenvolvimento da

programação possibilita tratar com complexidades maiores.

Cada passo combina o melhor dos métodos anteriores com elementos mais avançados.

Muitos projetos estão próximos ou no ponto em que a programação estruturada se torna inviável.

POO veio resolver este problema. POO aproveita as melhores idéias da

programação estruturada e as combina com conceitos mais poderosos.

BinárioProg.

Estruturada

Page 3: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 3

POO possibilita que um problema seja decomposto em subgupos relacionados, então usando-se a linguagem podemos traduzir este subgrupo em objeto.

Primeira linguagem que definia classes de objetos e hierarquia de classes foi Simula (1966, Noruega) .

Idéias de Símula foram base para a criação de TAD’s e para Smaltalk.

Smaltalk foi desenvolvida na Xérox, na década de 70 e incorporou além dos conceitos de Símula, a idéia de objetos ativos, prontos a “reagir” a mensagens que ativam “comportamentos” específicos do objeto. Várias linguagens Orientadas a Objeto foram desenvolvidas como: C++, Object Pascal, Eiffel e

mais recentemente: Tool. Smalltalk, uma das mais populares linguagens

orientadas a objetos, assim como outraslinguagens orientadas para objetos, tem sidousada em aplicações variadas onde a ênfase estána simulação de modelos de sistemas, comoautomação de escritórios, animação gráfica,informática educativa, instrumentos virtuais,editores de texto e bancos de dados em geral,entre outras

Page 4: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 4

Uma das atividades mais interessantes emInformática é certamente a busca constantede melhorias nas linguagens e técnicas parao desenvolvimento de software.

A Programação Orientada a Objetos utilizaos conceitos que aprendemos no jardim deinfância: objetos e atributos, todos e partes,classes e membros. É difícil explicar por quedemoramos tanto a aplicar estes conceitos àanálise e especificação de sistemas deinformações. Talvez estivéssemos ocupadosdemais “seguindo a boiada”

O conceito de Orientação Objeto dependemais da mentalidade do programador do queda linguagem de programação que estásendo utilizada. Pode-se conseguirprogramas razoavelmente orientados aobjeto em linguagens tipicamenteestruturadas, assim como pode-se conseguirprogramas estruturados em linguagensvoltadas para objetos.

Vejamos a frase

“O navio atraca no porto e descarregasua carga.”

Page 5: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 5

Analisando estruturalmente -> como o navio atraca no porto e como ele faz para descarregar sua carga Ênfase na ação).

Em orientação objeto, o enfoque com quese encara a frase é diferente: primeiropensaríamos no objeto navio, no objetoporto e no objeto carga, pensando comoeles seriam e procurando definir seucomportamento. Após isto é quepensaremos em como o navio se relacionacom o porto e com a carga, e como o portose relaciona com carga.

De modo grosseiro, podemos dizer que aoanalisarmos uma frase pensandoestruturadamente, damos ênfase aosverbos, e pensando orientado a objetos,damos ênfase aos substantivos.

Programador experiente => Inicialmentetem grande dificuldade em migrar paraPOO.

Tem que se analizar os problemasestruturadamente, para reaprender aanalisá-los de forma voltada a objeto.

Vantagems da POO Sensível redução no custo de

manutenção do software Aumento na reutilização de código

Page 6: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 6

Redução no custo: Em POO existem certas características (herança e encapsulamento) que permitem que, quando for necessária alguma alteração, modifique-se apenas o objeto que necessita desta alteração, e ela propagar-se-á automaticamente às demais partes do software que utilizam este objeto.

Aumento na reutilização de código : com orientação a objeto podemos acessar e usar como se fossem seus os métodos e a estrutura de outro objeto. Caso existam dois objetos bastante semelhantes, podemos escrever os métodos apenas uma vez e usá-los para os dois objetos. Apenas o que realmente for diferentes para os dois objetos é que precisa ser escrito individualmente.

Page 7: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 7

Há uma grande discussão sobre o que é exatamente uma linguagem orientada a objetos.

Vejamos os conceitos básicos do Paradigma de Orientação a Objetos: Objetos, Classes, Mensagens, Métodos, Herança, Generalização, Especialização, Abstração, Polimorfismo, Encapsulamento e Late-Binding.

CLASSE Conjunto de dados estruturados que são

caracterizados por propriedades comuns. Também pode ser interpretado como uma estrututura modular completa que descreve as propriedades estáticas e dinâmicas dos elementos manipulados pelo programa. Define a estrutura e o comportamento comum

a todos os objetos que são relacionados. Um objeto possui uma identidade e suas características serão definidas para a classe.

Uma classe é definida por: um nome da classe; o nome da sua superclasse; o nome de suas variáveis privadas; os nomes e as definições de todas as operações associadas a esta classe;

Classe é um conceito estático, objeto é um conceito puramente dinâmico.

Page 8: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 8

class fila {int f [100];int primeiro, ultimo;

public:void inicio (void);void put (int valor);int get (void);

}

Uma classe pode conter tanto partes públicas como privadas.

Para tornar públicas as partes de uma classe, ou seja, acessíveis o outras partes do programa, é preciso declará-las após a palavra public

ATRIBUTOS Um atributo é um dado para o qual cada objeto

tem seu próprio valor. São, basicamente, a estrutura de dados que vai representar a classe.

Exemplo de atributos, usando a classe fila: int f [100] ; int primeiro, ultimo;

Page 9: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 9

MÉTODOS Representam as operações que os objetos

pertencentes a uma classe podem executar. É a implementação de uma rotina, ou seja, o

código propriamente dito. Ex:

void iniciar (void){

primeiro = 0;ultimo = 0;

};void put ( int valor){

f [ultimo] = valor;ultimo++;

};OBJETOS

Seriam os objetos como sendo os objetos físicos do mundo real

É uma entidade lógica que contém dados e código para manipular esses dados. Os dados são denominados como sendo atributos do objeto, ou seja, a estrutura que o objeto tem, e o código que o manipula denominamos método. Um método é uma função que manipula a estrutura de dados do objeto

Page 10: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 10

Um objeto é um ente independente, composto por: estado interno, uma memória interna em

que valores podem ser armazenados e modificados ao longo da vida do objeto.

comportamento, um conjunto de ações pré-definidas (métodos), através das quais o objeto responderá a demanda de processamento por parte de outros objetos.

Ex: Uma tela de computador pode ter os seguintes atributos e métodos: atributos modo de operação /* texto/gráfico */ tamanho horizontal tamanho vertical paleta de cores cor atual

métodos modo texto ( ) modo gráfico ( ) fecha modo gráfico ( ) muda cor ( )

Page 11: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 11

Podemos notar que um objeto é composto por estrutura e processos, onde esses processos giram em torno da estrutura, ao contrário das linguagens funcionais, nas quais a estrutura se adapta a função. Um objeto só pode ser manipulado por sua estrutura e seus métodos, nada mais do que isso.

Somente um objeto de um determinado tipopode acessar seus métodos e estrutura, umoutro tipo de objeto não tem nenhum acesso aestes.

Dentro de um objeto, alguns métodos e/ouestrutura podem ser privados, ao objeto, o quenos diz que são inacessíveis diretamente paraqualquer elemento fora dele. Podem sertambém públicos ou protegidos.

Mais exatamente, cada objeto é umainstância de sua classe. É a classe quecontém a descrição da representaçãointerna e dos métodos comuns a todas assuas instâncias (objetos).

Cada instância da classe, por sua vez,possui sua própria memória privativa (seuestado interno) onde ficam armazenadosos valores de seus componentes, querepresentam suas característicasindividuais

Page 12: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 12

Com isso podemos diferenciar claramente uma classe de objeto. A classe é apenas um tipo de dado, que somente representa características comuns a determinados objetos.

Os objetos de uma determinada classe nãosão iguais. Apenas possuem a mesmaestrutura e compartilham as mesmasoperações sobre estas estruturas.

Uma coisa importante de um objeto é seuciclo de vida, que engloba o momento emque é declarado até sua eliminação. Noinstante em que um objeto é declarado, éalocado um espaço em memória para ele eautomaticamente executado seu construtor.A partir deste momento o objeto está prontopara ser usado. Esta fase vai até aeliminação do objeto.

Em programação orientada a objetos,primeiramente o que deve ser identificadosão os objetos que o problema requer (atémesmo os tipos simples de dados são vistoscomo objetos, porque têm estrutura eoperações (métodos) que o manipulam).

Page 13: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 13

MENSAGENS Mensagens são requisições para que um

objeto execute uma de suas ações. Cada objeto somente pode responder às

mensagens que constem no seu protocolo ou no protocolo de sua superclasse.

Atender a uma mensagem significa executar algum método.

Objetos interagem através de mensagens. Assinatura de uma mensagem é formada pelo

nome da mensagem e por seus parâmetros de entrada e saída juntamente com seus respectivos tipos.

Ex. Considerando a classe fila criada anteriormente fila f_atual; ... ...uma mensagem a este objeto seria: f_atual.quantos();

Page 14: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 14

ENCAPSULAMENTO Encapsulamento é combinar os dados (atributos)

e o código que manipula estes dados (métodos) em um único objeto com acesso controlado.

Em outras palavras, encapsulamento diz respeito à definição de uma estrutura que contenha os dados, defina quais os métodos de acesso público a esses dados e possua meios de proteger os demais métodos e os dados contra acesso direto.

Fica a pergunta: “Porque impedir este acesso?” Imagine um objeto polinômio. Vamos supor que a

estrutura de dados utilizada para representar um polinômio dentro do objeto seja um vetor. Este objeto, quando criado, recebe um string contendo o polinômio que ele representará (por exemplo, “x2 + 2x +10”) e possui, entre outros, um método para, dado um x, calcular f(x).

Considere o código:

Objeto

AplicaçãoAtributos

Métodos

Page 15: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 15

class Termo{Float coeficiente;Int expoente; }

class polinomio{Termo vetor[30];polinomio(String novo)

{ ... }void insere (Float coef; Int expo)

{ ... }Float calcula_fx(Float x)

{ ... }}

Suponha que eu não tenho este método e quenão exista encapsulamento. Como seria se minhaaplicação precisasse calcular f(x)? Ela calcula!!Beleza!

Se um dia você resolver representar o polinômiocomo uma lista encadeada e não mais como umvetor? O que acontece com o código da aplicaçãopara calcular f(x)?

No caso de termos o encapsulamento como estamudança atingiria a aplicação? As mudanças nãoseriam tão drásticas!

O encapsulamento garante que minha classe sejauma caixa preta para o usuário.

Page 16: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 16

Além desse aspecto, ainda há o da proteção dos dados encapsulados. Restringir o acesso dos atributos aos métodos da classe garante que nenhum dado será alterado por engano ou de forma descontrolada.O encapsulamento protege os dados, e faz o uso do objeto ser mais seguro.

Note-se que este conceito possui efeito contrário para um objeto mal definido.

HERANÇA Herança é a propriedade dos objetos que permite

a criação de uma hierarquia entre eles, onde osdescendentes herdam o acesso ao código eestruturas de dados dos seus ancestrais.

Coad-Yourdon define Herança como:“Mecanismo para expressar a similaridade entreclasses, simplificando a definição de Classessimilares a outras que já foram definidas. Elarepresenta generalização e especialização,tornando atributos e serviços comuns em umahierarquia de Classe”.

Vejamos um exemplo simples. Digamos que eutenha uma classe Animal.

Page 17: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 17

Todos os objetos da classe Animal possuem características (atributos) comuns, como peso, altura, idade, etc. Também fazem determinadas tarefas (serviços ou métodos) como Comer, Procriar, Nascer, Morrer, etc.

Eu posso abstrair esse objeto Animal para reduzi-lo à seguinte representação:

class Animal {int Peso, Altura, Idade;boolean EstaComFome;

public:Animal( ) { ... } /* Construtor */boolean ComFome( );int Peso( );int Altura( );...}

Digamos que agora eu precise definir uma classe mamíferos. Eles são animais mas fazem algumas coisas diferentes de outros animais como mamar ou gestar filhotes. Sem herança replicaríamos todo o código de Animal e então acrescentaríamos as particularidades de mamífero. Com herança podemos fazer Mamífero herdar de Animal.

Page 18: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 18

Na verdade, é fácil perceber que Mamífero é naverdade uma especialização de Animal, umherdeiro dessa classe. Assim, se eu dispuser deum mecanismo que me permita declararMamífero como tal, e assim herdar todos osmétodos e atributos da classe ancestral, nãoprecisarei replicar código, apenas incluirei osmétodos e atributos específicos na classeMamífero, e redefinirei os métodos que acharnecessário. O mecanismo que me permite isso éa Herança.

Exemplo de uma hierarquia de classes

Page 19: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 19

Um método pode ser definido em uma classe e redefinido em uma subclasse caso isto seja necessário.

É importante entender que cada objeto vai ter o seu próprio grupo de atributos. A chamada à Chita.Mamar( ) vai afetar as variáveis de Chita unicamente, e não de algum objeto Mamífero declarado.

Também é importante não confundir Herança com Composição de Classes. Composição de classes é quando temos uma classe que possui como atributo um objeto de outra classe. Por exemplo, podemos dizer que o objeto carro possui pneus, e podemos colocar na sua lista de atributos quatro objetos Pneu:

class Carro{Pneu pneus[4];...}

Assim, a pergunta-chave para distinguir herança de composição é: A minha classe possui a classe X, ou ela é X? Se ela possui, temos composição, se ela é, temos herança.

Page 20: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 20

POLIMORFISMO Polimorfismo é a propriedade de uma ou mais

classes responderem a mesma mensagem, cada uma de uma forma diferente. Desta forma é possível explorar similaridades entre diferentes classes de objetos.

Um objeto emissor envia uma mensagem, se oobjeto receptor implementa um método com amesma assinatura, ele poderá respondê-la.

Diferentes respostas serão possíveis para amesma mensagem (ou chamada), dependendode como os métodos dos receptores estãoimplementados.

No Java e C++ o polimorfismo é implementadopelo uso de sobrecarga de funções. Duas oumais funções podem compartilhar o mesmonome, contanto que as suas declarações deparâmetros sejam diferentes.

O programa a seguir cria três funções similares,porém diferentes, chamadas de quadrado. Cadauma delas retorna o quadrado do seu argumento.Como o programa ilustra, o compilador sabe qualfunção usar em cada situação por causa do tipode argumento.

Page 21: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 21

int quadrado (int i);double quadrado (double d);long quadrado (long l);main (void){

cout << quadrado (10) << “\n”;cout << quadrado (11.0) << “\n”;cout << quadrado (90000) << “\n” ;return 0;

}int quadrado ( int i){

cout << “Dentro da função quadrado ( ) que usa “;cout << “um argumento inteiro.\n”;return i*i;

}double quadrado (double d){

cout << “Dentro da função quadrado ( ) que usa “;cout << “um argumento double.\n”;return d*d;

}long quadrado (long l){

cout << “Dentro da função quadrado ( ) que usa “;cout << “um argumento long.\n”;return l*l;

}

Page 22: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 22

O que torna a sobrecarga de funções importante é o fato de ela poder ajudar à simplificar o entendimento do software permitindo que um conjunto de funções semelhantes seja acessado usando-se um único nome.

Você pode usar o mesmo nome parasobrecarregar funções não relacionadas,mas não deve fazê-lo. Ex. Usar o mesmonome em uma função para retornar oquadrado e a raiz quadrada de um inteiro eum float.

Tipos Clássicos de Polimorfismo De operadores: (distinção pelo tipo do

elemento): já vem implementado emtodas as linguagens. Por exemplo, sevocê deseja somar dois números inteiros;

Redefinição de operadores: utilizadaquando necessita-se de operações quenormalmente não são disponíveis nalinguagem de programação. Porexemplo, soma de matrizes.

Dois métodos iguais na mesma classe:distinguem-se pelo número e/ou tipo deparâmetros ou objetos referenciados ;

Page 23: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 23

LATE BINDING Late Binbing é um técnica que não esta

ligada somente as linguagens Orientadas a Objetos, muitas outras linguagem usam esta técnica, principalmente as linguagens não tipadas.

Apesar de não haver muita bibliografiasobre esta técnica no que se refere aorientação a objeto, esta é a técnica quepermite a existência de muitos conceitos doparadigma orientado a objetos.

Na programação orientada a objeto aodefinir uma classe ela pode usar objetosque não foram definidos ainda e sercompilada normalmente.

Existem várias formas de Ligação Tardia ediferentes em cada linguagem, portanto nãoexiste nenhum padrão rígido para LigaçãoTardia.

Vejamos algumas definições: É a técnica de adaptar objetos a

determinadas situações; É usar objetos definidos em módulos

completamente independentes, de modo quenão é necessário conhecer o estado domódulo, apenas a sua interface;

Page 24: Programação Orientada a Objetos... verbos, e pensando orientado a objetos, damos ênfase aos substantivos. ... como se fossem seus os métodos e a estrutura de outro objeto

Aula POO 24

Escolha de uma propriedade num conjunto delas. Durante o processamento (interpretação/compilação) são definidos conjuntos de possibilidades.

Ligação precoce e tardia: referem-se aos eventos que ocorrem no momento da compilação, e no momento da execução respectivamente.

Em relação à orientação a objetos, ligaçãoprecoce significa que um objeto é ligado asua chamada de função no momento dacompilação, isto é , todos as informaçõesnecessárias para determinar qual funçãoserá chamada são conhecidas quando oprograma é compilado. A principal vantagemda ligação precoce é a eficiência - é maisrápido e requer menos memória.

A ligação tardia significa que um objeto éligado à sua chamada de função namomento da execução. Isso determina nodecorre da execução do programa qualfunção se relacionará com qual objeto. Avantagem é a flexibilidade.