Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação em Computadores Unidade 3 – Conceitos avançados de OO Prof. Miriam Z. Parra Sejas miriam.zareth.parra.sejas@ufsc.br UNIVERSIDADE FEDERAL DE SANTA CATARINA 2/69 UNIDADE 3: Conceitos avançados de Orientação a Objetos Encapsulamento. Herança. Polimorfismo. Mensagens CONTEUDO 3/69 Encapsulamento Se encarrega de esconder atributos ou métodos Restringir o acesso a membros de uma classe via private é chamado de encapsulamento (posteriormente veremos também o modificador de acesso adicional protected). Atributos e métodos privados só podem ser acessados desde a mesma classe Para acessar a métodos ou atributos privados desde outras classes se empregam os métodos Setters e Getters CONCEITOS AVANÇADOS DE OO 4/69 Encapsulamento Evitar o acesso direto permite esconder a maneira como a classe realiza suas tarefas, assim como também garantir que o preenchimento de determinadas informações seja realizada de maneira consistente O encapsulamento faz com que a implementação de uma classe seja ocultada de seu cliente Isso permite, por exemplo, futuras alterações na forma como a classe funciona internamente sem a necessidade de alterar o cliente. CONCEITOS AVANÇADOS DE OO 5/69 Encapsulamento Por quê encapsular? Classe Pessoa int idade; É importante garantir que ao inicializar ou alterar os valores de uma determinada instância, esses valores sejam consistentes com a realidade representada pelo objeto. Se a modificação dos atributos de um objeto é realizada apenas por meio de métodos, é possível garantir que essas condições sejam respeitadas. CONCEITOS AVANÇADOS DE OO idade=-5 idade=5.75 idade=89756 6/69 Agregação e Composição São tipos de associações. Uma associação representa uma referência entre objetos. Em termos de programação não são muito diferentes. Agregação é um tipo de Associação que consiste em uma relação entre duas classes (possui-uma, "has-a") A classe agregada contém uma referência para outra classe e possui a propriedade daquela classe. Cada classe referenciada é considerada como parte da classe agregada. CONCEITOS AVANÇADOS DE OO 7/69 Agregação A classe agregada é dita como dona da classe referenciada Não pode haver referências cíclicas em uma relação de agregação. CONCEITOS AVANÇADOS DE OO 8/69 Agregação Quando acontece este tipo de associação? acontece quando um objeto precisa de outro objeto para completar a sua ação (Todo/Parte), ou seja, faz a agregação de um objeto externo e o utiliza como parte de si própria. CONCEITOS AVANÇADOS DE OO 9/69 Agregação Quando acontece este tipo de associação? A agregação indica que uma das classes do relacionamento é uma parte, ou está contida em outra classe. As palavras chaves usadas para identificar uma agregação são:“tem um", "contém", "é parte de". CONCEITOS AVANÇADOS DE OO 10/69 Agregação Na agregação o objeto existe fora do outro, é criado fora e então é passado como um argumento (por exemplo) ao construtor. Por exemplo: Pessoa e Carro. O carro é criado em um contexto diferente e então torna-se propriedade de uma pessoa. CONCEITOS AVANÇADOS DE OO 11/69 Agregação Exemplo classe Estudante faz uma referência para a classe Endereço. CONCEITOS AVANÇADOS DE OO Possui-um 12/69 Agregação Exemplo CONCEITOS AVANÇADOS DE OO 13/69 Agregação Exemplo No momento de criar uma classe Estudante é necessário passar como parâmetro ao construtor o objeto Endereço. A criação do objeto do tipo Endereco é realizada antes, e então o mesmo é enviado para o construtor de Estudante. CONCEITOS AVANÇADOS DE OO 14/69 Agregação Vantagens A agregação (e também a composição) permite a reusabilidade de código CONCEITOS AVANÇADOS DE OO 15/69 Exercício 1 a) Implemente as classes Estudante, Professor, Facultade e Endereço. b) Desenvolva uma classe de Teste que instancie objetos dessas classes e que imprima os valores na tela. CONCEITOS AVANÇADOS DE OO 16/69 Exercício 2 O teatro possui um nome e um endereço. No teatro são realizadas quatro apresentações ao dia. Cada apresentação tem um nome e um preço. a) Faça o diagrama UML b) Implemente as classes No exercício anterior incremente metodos que permitam trocar o nome do teatro e o nome e preço das apresentações CONCEITOS AVANÇADOS DE OO 17/69 Composição A Composição é uma forma restrita de Agregação em que duas entidades são altamente dependentes uma da outra. A composição implica propriedade de um objeto sobre outro Na Composição, uma classe normalmente cria a instância de outra classe dentro de si própria, sendo assim, quando ela for destruída, a outra classe também será. Também é uma relação Todo/Parte, ou seja, a classe principal é o todo, e as outras classes nela instanciadas, suas partes. CONCEITOS AVANÇADOS DE OO 18/69 Composição A Composição implica que os objetos referenciados compartilham do mesmo "tempo de vida" do objeto que as referencia. Em termos práticos, a composição não implica em grandes alterações na programação. A mudança principal é que os objetos referenciados são normalmente criados (e destruídos) ao mesmo tempo que o objeto que os referencia. A composição acontece quando um objeto não existe (ou faz sentido em existir) sem que o outro exista. CONCEITOS AVANÇADOS DE OO 19/69 Composição Exemplo Tabuleiro de xadrez é composto por quadrados de xadrez. Esses quadrados não existem sem que o tabuleiro exista. CONCEITOS AVANÇADOS DE OO 20/69 Composição Por outro lado, em uma agregação os objetos podem existir de maneira independente. Por exemplo, um carro é uma agregação de diversas partes - um escapamento de carro, ou uma porta de carro continuam existindo (ainda que não seja uma parte do carro). A decisão de usar uma agregação ou composição está sempre muito relacionada com o contexto específico em que uma classe será utilizada CONCEITOS AVANÇADOS DE OO 21/69 Composição Exemplo Pessoa - coração. Não faz muito sentido criar um coração e então passar o mesmo para a pessoa. Isso sugere a utilização da composição CONCEITOS AVANÇADOS DE OO 22/69 Composição CONCEITOS AVANÇADOS DE OO 23/69 Herança Exemplo CONCEITOS AVANÇADOS DE OO EMPREGADO 24/69 Herança Exemplo CONCEITOS AVANÇADOS DE OO A guitarra é um instrumento de cordas dedilhada, que possuem geralmente de 6 a 12 cordas tensionadas ao longo do instrumento e possuem um corpo (pode ter caixa de ressonância) com formato de um 8, além de um braço, sobre o qual as cordas passam. O nome mais comum usado é violão. É um instrumento introduzido na Espanha no Século IX. Alaúde Balalaica Bandolim Banjo 25/69 Herança Exemplo CONCEITOS AVANÇADOS DE OO A flauta é instrumento musical de sopro feito de diversos tipos de madeiras com formato de um tubo oco com orifícios. É um aerofone que, a partir do fluxo de ar dirigido a uma aresta que vibra com a passagem do ar, emite som. A mais antiga foi descoberta na caverna Hohle Fels perto de Ulm, Alemanha. Flauta doce Flauta transversal Flauta pã Ocarina Pifano Diaulo 26/69 Herança Exemplo CONCEITOS AVANÇADOS DE OO 27/69 Herança Exemplo CONCEITOS AVANÇADOS DE OO É um 28/69 Herança Característica importante da orientação a objetos que permite organizar as classes em hierarquias demaneira que herdem os atributos e métodos das outras classes (PINHEIRO, 2006) Forma de reutilização de software em que uma nova classe é criada absorvendo membros de uma classe existente de modo que esta possa ser aprimorada ou ter novas capacidades (DEITEL; DEITEL, 2010). CONCEITOS AVANÇADOS DE OO 29/69 Herança Permite a criação de duas, ou mais, classes muito semelhantes, evitando a necessidade de escrever a parte comum, entre elas, duas vezes Um relacionamento de herança forma uma estrutura hierárquica em árvore; A superclasse existe em um relacionamento hierárquico com suas subclasses CONCEITOS AVANÇADOS DE OO 30/69 Herança Se uma classe B herda os atributos e métodos de uma classe A, dizemos que B é subclasse de A, e que A é superclasse de B Também é comum a referência a B como classe filha ou descendente e a referência a A como pai ou ancestral Na herança temos um relacionamento do tipo "é um". CONCEITOS AVANÇADOS DE OO 31/69 Herança Em um relacionamento do tipo "é um" o objeto de um tipo de subclasse também pode ser tratado como objeto de seu tipo de superclasse. Também é comum a referência a B como classe filha ou descendente e a referência a A como pai ou ancestral CONCEITOS AVANÇADOS DE OO 32/69 Herança Exemplo CONCEITOS AVANÇADOS DE OO É um Classe pai / Superclasse Classe filha / Subclasse 33/69 Herança CONCEITOS AVANÇADOS DE OO É um A classe estudante é também uma pessoa pelo que herda os atributos e métodos da classe Pessoa mais também possui métodos e atributos próprios Classe pai / Superclasse Classe filha / Subclasse Um estudante é uma pessoa mas nem toda pessoa é um estudante. Pelo que sabemos que estudantes herda de pessoa 34/69 Herança CONCEITOS AVANÇADOS DE OO superclasse superclasse subclassesubclasse superclasse subclasse subclasse 35/69 Herança Em Java Em Java para que uma classe herde atributos e métodos de outra classe utiliza-se a palavra-chave extends na definição da classe. A classe Estudante herda todos os membros não privados da classe Pessoa (exceto os construtores). O acesso a atributos privados, o acesso que deve ser feito via métodos setters e getters. CONCEITOS AVANÇADOS DE OO 36/69 Herança em Java CONCEITOS AVANÇADOS DE OO 37/69 Herança em java CONCEITOS AVANÇADOS DE OO Chamada super deve ser sempre a primeira Instrução. 38/69 Herança em java Um método da classe filha pode redefinir um atributo ou método da classe pai antepondo a palavra super. Uma classe pai pode derivar-se em classes filhas e essas classes filhas em classes netas. Os atributos e métodos da classe pai passam para as filhas e das filhas as classes netas. No Java, uma classe não pode ter mais de uma classe pai (não existem heranças múltiplas) CONCEITOS AVANÇADOS DE OO 39/69 Sobrescrita Quando uma classe possui descendentes, e possuiu métodos que ficam visíveis a seus descendentes. Estes métodos podem sofrer uma sobrescrita feita pelos descendentes. CONCEITOS AVANÇADOS DE OO 40/69 Sobrescrita Acontece a sobrescrita, quando o método definido na classe filho possui o mesmo nome, tipo de retorno e parâmetros que o método definido na classe pai. CONCEITOS AVANÇADOS DE OO //classe pai public void soma(int a, int b) { int c = a+b; } // classe filha public void soma(int a, int b) { System.out.println("a"+a + "b"+b)); } 41/69 Membros Protected Os membros public de uma superclasse são acessados de qualquer lugar em que o programa tenha uma referência para o tipo dessa superclasse ou para o tipo de suas subclasses Os membros private de uma superclasse são acessados apenas em métodos dessa superclasse Os membros de acesso protected de uma superclasse servem como nível intermediário de proteção entre o acesso public e o private CONCEITOS AVANÇADOS DE OO 42/69 Membros Protected Os membros protected de uma superclasse podem ser acessados apenas por métodos da superclasse, por métodos de subclasses e por métodos de outras classes no mesmo pacote (os membros protected tem acesso de pacote) Os métodos de subclasse normalmente podem fazer referência aos membros public e protected sa superclasse simplesmente com os nomes dos membros. CONCEITOS AVANÇADOS DE OO 43/69 Membros Protected Quando um método de subclasse sobrescreve o método de superclasse, o método de superclasse pode ser acessado a partir da subclasse que precede o nome do método de superclasse com a palavra- chave super seguida pelo operador ponto (.) CONCEITOS AVANÇADOS DE OO 44/69 Exercício 3 Implemente a seguinte hierarquia CONCEITOS AVANÇADOS DE OO 45/69 Exercício 4 Implementar uma classe Conta que deve possuir : nomeTitular: String; numeroConta: String; numeroAgencia: String; saldo: float; estado: String (positivo ou negativo); Métodos: Construtor, Saque, AlteraEstados (altera para positivo ou negativo dependendo do saldo), Deposito, Mostrar. Criar um outro método atualizar na classe Conta. Esse método deve incrementar percentualmente o saldo da conta.(this.saldo = this.saldo * percentual); Desenvolva também um método para transferir valores de uma conta para outra. Ex.: transferePara (Conta destino, float valor) Crie três classes que serão subclasses de conta: ContaCorrente, ContaPoupanca e ContaInvestimento. CONCEITOS AVANÇADOS DE OO 46/69 Exercício 4 Essas classes não terão nenhum atributo e deverão ter um método construtor que receba todas as informações dos atributos de conta e deverá invocar o método construtor da superclasse. As classes ContaPoupanca e ContaInvestimento deverão sobreescrever o método atualizar que deve aplicar um rendimento diferencial, como segue: this.saldo += this.saldo * 1,005; //Conta Poupança this.saldo += this.saldo * 1,01; //Conta Investimento Elabore uma classe TestaConta com um método main() que permita criar instâncias das classes Conta, ContaCorrente, ContaPoupanca e ContaInvestimento. Após isso invoque o método atualizar() para cada instância. Por fim, apresente (imprima) o saldo. CONCEITOS AVANÇADOS DE OO 47/69 CONCEITOS AVANÇADOS DE OO Polimorfismo O polimorfismo (poli = múltiplas; morfo = forma) é a propriedade na qual um mesmo estímulo pode causar respostas de comportamento diferentes para duas ou mais classes. Se uma classe passa em mais de um teste da regra “é um”, os objetos (instâncias) desta classe podem ser considerados polimórficos 48/69 CONCEITOS AVANÇADOS DE OO Polimorfismo No polimorfismo, o tipo da referência pode ser uma superclasse com o tipo do objeto real. Quando você declarar uma variável de referência, qualquer objeto que passar no teste É-UM quanto ao tipo declarado para ela poderá ser atribuído a essa referência. Em outras palavras, qualquer coisa que estender o tipo declarado para a variável de referência poderá ser atribuído a ela. Isso permitirá que você faça coisas como criar vetores polimórficos, 49/69 CONCEITOS AVANÇADOS DE OO Polimorfismo Veículo ve = new Veículo("Toyota", "Corolla", "OXO1234") No polimorfismo, o tipo da referência pode ser uma superclasse com o tipo do objeto real. Um objeto da classe pai pode armazenar um objeto de qualquer da suas classes filhas Veículo ve1 = new Onibus("Toyota", "Corolla", "OXO1234“, 6) Veículo ve1 = new VeículoEsportivo("Toyota", "Corolla", "OXO1234“, 200) Veículo ve1 = new Camionete("Toyota", "Corolla", "OXO1234“, 5000) 50/69 CONCEITOS AVANÇADOSDE OO Superclasses Abstratas Método a ser sobrescrito 51/69 CONCEITOS AVANÇADOS DE OO Superclasses Abstratas Chamada ao método toString da classe pai Método a ser sobrescrito 52/69 CONCEITOS AVANÇADOS DE OO Superclasses Abstratas Chamada ao método toString da classe pai Método a ser sobrescrito 53/69 CONCEITOS AVANÇADOS DE OO Superclasses Abstratas Chamada ao método toString da classe pai Método a ser sobrescrito 54/69 CONCEITOS AVANÇADOS DE OO Superclasses Abstratas Polimorfismo ve do tipoVeiculo instancia um Onibus ve do tipoVeiculo instancia um VeiculoEsportivo ve do tipoVeiculo instancia um Camionete 55/69 CONCEITOS AVANÇADOS DE OO Superclasses Abstratas Ignoram detalhes das partes para focalizar a atenção em um nível mais elevado de um problema. É uma técnica usada para lidar com o problema da complexidade: Problemas são divididos em subproblemas até que os novos problemas sejam suficientemente pequenos para que possamos lidar com eles. 56/69 CONCEITOS AVANÇADOS DE OO Superclasses Abstratas Há casos em que é útil definir classes para as quais o programador nunca pretende instanciar um objeto (Deitel, 2004) Essas classes são chamadas de classes abstratas Nenhum objeto de superclasse abstrata pode ser instanciado O objetivo de uma classe abstrata é fornecer uma superclasse apropriada da qual outras classes podem herdar interface e/ou implementação (Deitel, 2004) 57/69 CONCEITOS AVANÇADOS DE OO Superclasses Abstratas Sabemos como um ser vivo tem que ser alimentado?? carne ervas Os métodos abstract tem que ser implementados nas classes filhas Muito Genérica Basta ter um método ABSTRACT para que a classe tenha que ser ABSTRACT abstract abstract fotossínteses Muito Genérica abstract abstract 58/69 CONCEITOS AVANÇADOS DE OO Superclasses Abstratas As classes em que os objetos podem ser instanciados chamam-se classes concretas (são as classes que foram vista até o momento na disciplina) Para declarar uma classe como abstrata utiliza-se a palavra-chave abstract Também é possível declarar métodos abstratos Sempre que um método de uma superclasse abstrata também é declarado como abstrato, esse método deve ser obrigatoriamente sobrescrito nas classes filhas 59/69 CONCEITOS AVANÇADOS DE OO Exemplo 60/69 CONCEITOS AVANÇADOS DE OO Exemplo Nâo é implementado na classe abstract, mas nas classes filhas Tem que ser obrigatoriamente sobrescrito nas classes filhas. 61/69 CONCEITOS AVANÇADOS DE OO Exemplo 62/69 CONCEITOS AVANÇADOS DE OO Exemplo 63/69 CONCEITOS AVANÇADOS DE OO Exemplo 64/69 CONCEITOS AVANÇADOS DE OO Exemplo variável da classe abstrata Ao invocar um método por meio da variável geral, o sistema irá determinar o tipo do objeto mencionado e invocar o método da subclasse respectiva. Denominado de vinculação dinâmica de método - a decisão sobre qual método invocar é adiada até a hora da execução 65/69 CONCEITOS AVANÇADOS DE OO Exercício 5 Fazer um programa para calcular a área de um polígono (Triângulo e retângulo). O programa vai ter que conseguir armazenar um vetor de N triângulos e retângulos e no final apresentar a área e os dados de cada um. Faça o diagrama UML e depois implemente o codigo 66/69 CONCEITOS AVANÇADOS DE OO Exercício 6 Numa biblioteca de mídia se tem documentos em diferentes médios: Livros, DVDs (vídeos) e CDs (áudios). Cada um dos documentos possui uma data de edição, titulo, um preço e um atributo onde é especificado se o documento esta disponível ou não. Por sua vez, os livros possuem autor, os DVDs diretor do filme e os CDs o nome do artista. Quando os documentos foram emprestados e não são devolvidos na data certa, existe uma multa. Nos livros a multa é 5% do valor do livro. Nos DVDs a multa é 6% do seu valor mais 5 reais. Nos CDs a multa é de 10% mais 2 reais. 67/69 CONCEITOS AVANÇADOS DE OO Exercício 6 Para conseguir pegar um documento da biblioteca é preciso ser sócio. Os dados que tem que ser registrados de cada sócio são: nome, RG e um numero de sócio. Cada sócio pode se emprestar até 3 documentos. Faça um diagrama das classes em notação UML especificando a relação existente entre as classes. Faça um programa em Java das classes definidas no diagrama UML Crie um programa principal com 3 documentos de tipos diferentes. Depois crie um objeto da classe sócio que pegue os 3 documentos criados. No final apresente na tela os dados do sócio e as multas que terá que pagar pelos 3 documentos emprestados. 68/69 Referências Slides professor Cristian Cechinel DEITEL, H.M. Java, como programar. Porto Alegre: Bookman, 2003. CONCEITOS AVANÇADOS DE OO 69/69 Unidade 3 Concluída!!! CONCEITOS AVANÇADOS DE OO
Compartilhar