Engenharia de Software Aula 10 – Representação dos Conceitos de Orientação a Objetos Prof. Me. Rogério Ferreira 2 Roteiro Representação dos Conceitos OO – – – – – – Mensagens Navegabilidade Pacotes Encapsulamento Herança Polimorfismo 3 Leitura necessária Livro: Modelagem de Sistemas Orientados a Objetos, de Sérgio Furgeri. – Capítulo 7. Classes e Objetos A partir da análise dos casos de uso, podemos identificar Classes e Objetos. O que é um Objeto? É qualquer elemento do mundo real (concreto ou abstrato), constituído de atributos e operações. O que é uma Classe? É a representação de um conjunto de objetos que compartilham a mesma Estrutura e Comportamento. Estrutura: de que o objeto é composto (atributos) Comportamento: ações que o objeto realiza (operações). 4 Classes e Objetos 5 Classe é um “molde” que contém a definição do objeto. Define o que ele tem (atributos) e o que ele sabe fazer (métodos ou operações). Classes e Objetos Definição de uma classe Nome da Classe Atributos Métodos 6 7 Classes e Objetos Objeto é a instância de uma classe. A partir da definição de uma classe, pode-se criar inúmeros objetos da mesma. Objetos da classe NotaFiscal Mensagens ● ● 8 Método: ação que o objeto realiza. Não executa aleatoriamente, precisa de um estímulo para ser executado. Uma mensagem é a execução do Método de uma Classe. Construtor ● ● 9 É o método executado quando o objeto é criado (por meio da palavra reservada new). Um construtor pode inicializar atributos e chamar outros métodos, para construir objetos complexos. Construtor sem Atributos Construtor com Atributos Pacotes 10 Pacotes funcionam como um diretório, cujo objetivo é organizar as classes. Geralmente, classes da mesma afinidade ou do mesmo propósito ficam no mesmo pacote. 11 Pacotes Na linguagem Java, a palavra reservada package é utilizada para atribuir classes a pacotes. Pacote Java Exercício ● ● Implemente a classe Medicamento na linguagem Java com todos os seus atributos e métodos: Considere as seguintes regras: – – – – ● 12 A classe deve ter dois construtores: um sem parâmetros e outro com parâmetros para inicializar todos os atributos da classe. O método alterarCodigo deve alterar o código do objeto, mostrando qual o código antigo e qual o código novo. O método excluir deve “resetar” todos os atributos do objeto. O método mostrar deve mostrar o valor de todos os atributos do objeto. Encapsulamento 13 Encapsular → colocar em uma cápsula Encapsular: ocultar detalhes de uma estrutura complexa, de forma a facilitar a análise de um problema. O Encapsulamento restringe o acesso a variáveis (atributos) e métodos de uma Classe. O objetivo é utilizar os serviços da classe, sem saber exatamente como isso ocorre. 14 Encapsulamento O encapsulamento é especificado por meio de quatro modificadores de acesso: público(+), privado(­), protegido(#) e pacote(~). Modificador público Situação indesejada! 15 Encapsulamento O encapsulamento é especificado por meio de quatro modificadores de acesso: público(+), privado(­), protegido(#) e pacote(~). Erro de Compilação! Encapsulamento Modificadores de Acesso: são utilizados para implementar o encapsulamento, restringindo o acesso aos Atributos ou Métodos da classe. ­ Público Protegido + Restrição Pacote Privado 16 Encapsulamento Modificadores de Acesso: privado Fonte: http://www.ustudy.in/node/1037 17 Encapsulamento Modificadores de Acesso: pacote (default) Fonte: http://www.ustudy.in/node/1037 18 Encapsulamento Modificadores de Acesso: protegido Fonte: http://www.ustudy.in/node/1037 19 Encapsulamento Modificadores de Acesso: público Fonte: http://www.ustudy.in/node/1037 20 Herança A palavra Herança, por si só, sugere ganhar ou receber algo. 21 22 Herança Herança é um mecanismo pra expressar similaridade entre classes. Superclasse Relação de Generalização (é-um) Subclasses 23 Herança Vantagens de se usar Herança Organização, criada por meio de uma hierarquia de classes. A hierarquia obedece as regras do encapsulamento. 24 Herança Vantagens de se usar Herança Reutilização: alterações realizadas na superclasse refletem diretamente nas subclasses. 25 Herança Vantagens de se usar Herança Especialização: possibilidade de criar “classes especialistas”, com regras específicas não definidas na classe original. 26 Herança Implementação da Herança em Java: utiliza-se a palavra reservada extends. Superclasse Subclasses Exercício ● 27 Resolver e entregar a seguinte lista de exercícios: Lista de Exercícios 05 – Orientação a Objetos e a Linguagem Java 28 Herança Classes Abstratas: classes que não permitem a geração de instâncias (criação de objetos) a partir delas. Classes Abstratas 29 Herança Classes Abstratas: classes que não permitem a geração de instâncias (criação de objetos). Erro de Compilação! Situação Válida! Polimorfismo ● ● 30 Polimorfismo = muitas formas. Característica de um mesmo objeto se comportar de formas diferentes, em contextos diferentes. A ideia do Polimorfismo é criar uma classe genérica que possa ter comportamento variado, dependendo das necessidades do momento da aplicação. Polimorfismo 31 Polimorfismo 32 Os objetos retangulo, triangulo e paralelogramo pertencem à mesma classe, mas se comportam de forma diferente. Associação entre classes 33 Multiplicidade um-para-um (mínimo zero ou um para qualquer um dos lados) Associação um-para-um, com mínimo zero do lado do SomAutomotivo Associação correspondente codificada na linguagem Java Associação entre classes 34 Multiplicidade um-para-muitos (mínimo zero ou um para qualquer um dos lados) Associação um-para-muitos, com mínimo zero do lado do Pedido Associação correspondente codificada na linguagem Java Associação entre classes 35 Multiplicidade muitos-para-muitos (mínimo zero ou um para qualquer um dos lados) Associação muitos-para-muitos, com mínimo zero do lado do Pedido Associação correspondente codificada na linguagem Java Associação entre classes 36 Associação com Navegabilidade: Representa a direção em que ocorre a comunicação entre as classes. Em termos práticos, define que um objeto precisa conhecer o outro, mas do lado oposto não. Associação com navegabilidade Unidirecional Associação correspondente codificada na linguagem Java Associação entre classes 37 Agregação: objeto parte existe de forma independente do objeto todo. Relação de Agregação Associação entre classes 38 Agregação: objeto parte existe de forma independente do objeto todo. Código correspondente na linguagem Java Associação entre classes Composição: objeto parte não existe de forma independente do objeto todo. Relação de Composição 39 Associação entre classes Composição: objeto parte não existe de forma independente do objeto todo. Código correspondente na linguagem Java 40 Exercícios 1) Conceitos Básicos Escolha a alternativa correta entre os conceitos básicos... a) uma classe abstrata permite a geração de instâncias a partir dela; b) o carácter # é utilizado para definir que um atributo ou método é público; c) não é possível que uma classe localizada em um pacote acesse outra classe de outro pacote; d) modelos mais abstratos são mais detalhados que modelos menos abstratos; e) mensagem é o mecanismo que possibilita que os objetos se comuniquem. 41 Exercícios 2) Encapsulamento O encapsulamento é um mecanismo da orientação a objetos que... a) possibilita garantir o acesso a variáveis e métodos de uma classe sem restrições; b) permite padronizar o acesso a variáveis e métodos da classe; c) possibilita uma classe herdar atributos e métodos de outra classe; d) visa restringir o acesso a atributos e métodos de outra classe, ocultando detalhes de implementação; e) possibilita restringir a criação de instâncias de uma classe. 42 Exercícios 3) Herança Encontre a afirmação errada em relação à Herança: a)em uma hierarquia de herança, normalmente a superclasse é mais abstrata que as suas subclasses; b)uma subclasse tem acesso somente aos atributos e métodos protegidos da superclasse; c)de acordo com os conceitos da orientação a objetos, cada subclasse pode ter várias superclasses; d)possibilidade de reuso e organização são duas das principais vantagens da herança; e)classes abstratas também podem conter métodos abstratos. 43 Exercícios 4) Relacionamentos entre Classes [Concurso Sanepar/2008] Com base no diagrama abaixo, assinale a(s) alternativa(s) correta(s): a)com base nas operações representadas é possível implementar o polimorfismo; b)a classe Motorista não tem acesso ao atributo nome da classe Pessoa; c) a classe Médico tem acesso a cinco atributos; d)é possível instanciar objetos da classe Funcionario; e)não é possível instanciar objetos da classe Pessoa. 44 Exercícios 45 5) Conceitos Básicos [Concurso TRT-13ª Região (PB)/2014] Considere o seguinte caso: Observando o trâmite de processos no tribunal, Marta percebeu que tanto advogados quanto juízes realizavam análises nos diversos pareceres constantes dos processos. Com sua experiência como analista ela deduziu que uma possível informatização dos processos poderia contemplar uma classe chamada Advogado e outra chamada Juiz, tendo como base uma classe comum chamada Pessoa, com um método chamado AnalisarParecer. Este método (definido na classe base) se comportaria de maneira diferente para as chamadas feitas a partir de uma instância de Advogado e para as chamadas feitas a partir de uma instância de Juiz, em razão deles terem responsabilidades diferentes em sua forma de analisar e opinar sobre os pareceres. Pela observação do método e seu comportamento, o princípio da orientação a objetos aplicável no caso, fundamentalmente, é... a) Herança b) Encapsulamento c) Polimorfismo d) Abstração e) Visibilidade 46 Exercícios 6) Escrever e entregar na próxima aula um texto contendo as palavras do quadro abaixo. Escreva um texto conciso, que contenha ligações entre os termos e a definição destes termos. UML Atributo(s) Instância Encapsulamento Generalização Papel Polimorfismo Classe(s) Objeto(s) Método(s) Relacionamento(s) Mensagem Navegabilidade Associação Dependência Agregação Composição Multiplicidade Herança Modificador(es) de Acesso Observação: as palavras em negrito devem conter um exemplo no texto, apresentado por meio de um diagrama de classes ou código fonte Java, sendo ainda um exemplo diferente do apresentado no material de aula. Exercícios 47 7) Entregar: Lista de Exercícios 06 – Associações e Polimorfismo Dúvidas 48 Referências ● 49 FURGERI, S. Modelagem de Sistemas Orientados a Objetos. 1a. Ed. São Paulo: Editora Érica, 2013.