Campus Cachoeiro de Itapemirim Curso Técnico em Informática Disciplina: Análise e Projeto de Sistemas Professor: Rafael Vargas Mesquita Este exercício deve ser manuscrito e entregue na próxima aula; Valor do exercício: 2,5 Pontos EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS Objetos O princípio da orientação a objetos está associado ao encapsulamento de comportamento: objetos podem ser considerados uma metáfora de comportamento intrínseco de entidades reais. Tal como em sistemas reais, em um programa OO não existem meios de abrir um objeto e olhar no seu interior, tão pouco alterar seu estado. Neste paradigma, a única forma de fazer evoluir um programa é permitir que objetos compartilhem dados entre si através de trocas explicitas de mensagens. Uma mensagem consiste em uma requisição, onde o objeto requisitante (sender) envia uma solicitação de serviço ao objeto requisitado (receiver). Este serviço, necessariamente, precisa pertencer à interface de serviços oferecida pelo objeto requisitado. Na nomenclatura OO, um serviço é especificado para um objeto como um método. A natureza de uma mensagem depende do tipo de serviço fornecido pelo método ao qual ela foi enviada. Um método pode ser de acesso, o qual permite a leitura de informações que estão localizadas no contexto do objeto requisitado, ou de modificação, que possui a capacidade de alterar alguma informação armazenada no contexto do objeto. A estas informações, representadas por dados armazenados no contexto do objeto, da se a denominação de atributos objetos possuem atributos representando seu estado interno. O estado interno de um objeto pode conter tanto valores como referenciar outros objetos. Exercício 1: Identifique, na figura abaixo, os seguintes itens: a. Interface dos objetos b. Métodos de acesso c. Métodos modificadores d. Estado interno
Classes Ainda considerando sistemas reais, é fácil notar que muitos objetos possuem características estruturais semelhantes, embora todo objeto seja único. Um bom exemplo disto são os objetos que recebem a denominação genérica de professor. Todos os professores possuem uma mesma estrutura, ou seja, todos os objetos professor implementam os mesmos métodos (comer, irshopping, recebersalario, daraula, atenderaluno etc) e mantêm informações sobre os mesmos atributos (peso, altura, número funcional, nome etc). O fato de que cada objeto mantém seus próprios atributos de forma encapsulada confere uma identidade única a cada objeto e também permite que dois objetos possam, eventualmente, possuir valores iguais para seus atributos. Estes grupos de objetos com estruturas semelhantes são definidos em termos de classes. Classes consistem na unidade básica da construção de um programa OO. Uma classe define o conjunto de atributos mantidos por um conjunto de objetos e o comportamento que estes objetos devem respeitar. Nesta nomenclatura, um objeto é dito instância de uma classe, ou seja, um objeto materializa, em um programa em execução, uma unidade de execução que reflete a definição apresentada em uma classe. Exercício 2: A figura abaixo representa a classe Cofrinho. Considerando a simbologia utilizada nesta representação, defina a classe Professor. Classes e Objetos As classes, ou tipos abstratos de dados, são definidas pelo programador em tempo de construção de seu programa. É possível que classes relacionem-se entre si, alguns destes relacionamentos, como a agregação e a herança, serão discutidos nas próximas aulas. Uma classe consiste em uma especificação de um conjunto de objetos que possuem a mesma estrutura, a qual deve ser representada em termos de seu estado interno ou características (atributos) e de seu conjunto de serviços ou comportamentos (métodos). Os objetos são instanciados explicitamente a partir de uma classe especifica durante a execução do programa. Cada objeto reproduz a estrutura definida pela classe. É importante observar que dois objetos criados de uma mesma classe possuem a mesma estrutura, mas cada um possui uma área de memória própria para armazenar seus atributos. Portanto, a execução de um método em um objeto tem acesso somente ao estado interno do próprio objeto. Assim, caso dois objetos criados da mesma classe venham a receber uma mesma mensagem, a resposta não é necessariamente a mesma. Exercício 3: Dê uma definição para os seguintes termos: a. Atributo b. Método c. Estado Interno d. Instanciação e. Encapsulamento
Exercício 4: Identifique no programa Java abaixo onde se encontram as classes e os objetos. public class Teste { public static void main( String args [] ) { String nome; Entrada teclado; Saida tela; nome = new String(); tela = new Saida(); teclado = new Entrada(); tela.print("digite seu nome: "); nome = teclado.gets(); tela.print("olah " + nome + ", bem-vindo a Laboratório 2!!!"); Modificadores de Visibilidade Quando da definição de uma classe, o programador define os membros que deveram compor a estrutura dos objetos que a partir dela forem criados, notadamente os seus atributos e métodos. Temos visto em nossos exemplos que alguns destes membros tem sido definidos como private e alguns como public. Isto significa que os referidos membros ou podem ser acessados somente no escopo do objeto (privado) ou pertencem a interface do objeto (público). Tipicamente métodos são públicos e atributos são privados. Exercício 5: É possível que um atributo seja definido como public, no entanto isto não é interessante. Justifique esta afirmação. Exercício 6: É possível que um atributo seja definido como private, e o uso deste recurso pode interessante em determinados casos. Justifique esta afirmação. Caracterize uma situação em que se faça interessante o uso de um atributo privado. Exercício 7: Considere uma classe Aluno. Esta classe possui como atributos privados o nome (String), as notas de nota1 e nota2 (double), e a freqüência (int). Além do construtor, objetos desta classe devem contar com os métodos que provêem acesso aos valores dos atributos. Como seriam os nomes destes métodos, considerando o padrão java, bem como, o nome dos atributos, anteriormente mencionados. Herança A herança é um recurso de programação do paradigma orientado a objetos que permite o reaproveitamento de esforço já despedido no desenvolvimento de um sofware. Este recurso permite que uma classe seja definida herdando características de uma outra classe já existente. Dá-se a denominação de superclasse a classe original e de subclasse a nova classe. Outras nomenclaturas populares: classe base e classe derivada, classe mãe e classe filha (note que não existem outros parentescos, tipo: classes irmãs). Uma das grandes vantagens da herança é de diminuir a necessidade de replicar código em um programa, permitindo que trechos de códigos definidos para uma classe sejam reaproveitados na construção de outras.
Exercício 8: Observe o código das classes Fatorial e Fibonacci apresentados abaixo. class Fatorial { class Fibonacci { private int n, res; private int n, res; public Fatorial( int aux ) { n = aux; res = 1; public Fibonacci( int aux ) { n = aux; res = 0; public void calcula() { int i; for( i = 1 ; i < n ; i++ ) res = res * i; int getres() { return res; public void calcula() { int i, t, a = 0, b = 1; for( i = 1 ; i < n ; i++ ) { res = a + b; a = b; b = res; int getres() { return res; O que estas classes possuem em comum? 1. 2. 3. Polimorfismo De forma genérica, polimorfismo significa "várias formas". Numa linguagem de programação, isso significa que pode haver várias formas de fazer uma "certa coisa". Aí vem a primeira coisa importante: que "certa coisa" é essa? A resposta é que estamos falando de chamadas de métodos. Portanto, em Java, o polimorfismo se manifesta apenas em chamadas de métodos. Agora, podemos ser mais específicos sobre a definição de polimorfismo: Polimorfismo significa que uma chamada de método pode ser executada de várias formas (ou polimorficamente). Quem decide "a forma" é o objeto que recebe a chamada. Essa última frase é muito importante, pois ela encerra a essência do polimorfismo. Leia a frase novamente. Ela significa o seguinte: Se um objeto "a" chama um método xpto() de um objeto "b", então o objeto "b" decide a forma de implementação do método. Mais especificamente ainda, é o tipo do objeto "b" que importa. Para concretizar melhor, digamos que xpto() seja grita(). Então a chamada b.grita() vai ser um grito humano se "b" for um humano e será um grito de macaco, se o objeto "b" for um macaco. O que importa, portanto, é o tipo do objeto receptor "b". Exercício 9: Considerando a apresentação IFES-APS-Aula02-OrientacaoAObjetos-ParteII disponibilizada no ftp, bem como, a figura a seguir, responda certo ou errado para os trechos de código (justifique os itens errados):
Considere a primeira linha de código: Veiculo veiculo = criarveiculo(args[0]); a. ( ) veiculo.buzinar(); b. ( ) veiculo.buzinar( carropasseio ); c. ( ) veiculo.frear(); d. ( ) veiculo.atirarcanhao(); Exercício 10: Considerando os conceitos sobre polimorfismo, e os códigos das duas classes a seguir: Responda qual será a saída para o seguinte trecho de código: