Baixe o app para aproveitar ainda mais
Prévia do material em texto
Orientação a Objetos Princípios de Orientação a Objetos Introdução a Programação Orientada a Objetos O que é um paradigma de programação? É um padrão conceitual que orienta soluções de projeto e implementação. Paradigmas explicam como os elementos que compõem um programa são organizados e como interagem entre si. –Ex.: procedural, funcional, orientado a objetos. Introdução a Programação Orientada a Objetos Objetivo da Programação OO Gerar programas que sejam: –reutilizáveis –de fácil manutenção –obtidos de forma produtiva –legíveis e de fácil compreensão Compreender os Fundamentos Básicos do Paradigma de Orientação a Objetos (OO). Motivar a Construção de Aplicações OO Introdução a Programação Orientada a Objetos Paradigma de Orientação a Objetos Paradigma [Aurélio, 1998] 1. Modelo, padrão; 2. Aquilo que serve de exemplo ou norma; 3.Aquilo que serve de base para a avaliação de qualidade ou quantidade. Orientação a Objetos (OO) Organizar o mundo real como uma coleção de objetos que incorporam estrutura de dados e um conjunto de operações que manipulam estes dados. Introdução a Programação Orientada a Objetos Orientação a Objetos (OO) Conjunto de princípios computacionais (conceitos, técnicas, métodos,...) que definem a base comum e o conjunto de características essenciais dos Sistemas Orientados a Objetos. Introdução a Programação Orientada a Objetos Origens do Paradigma OO Linguagens de Programação - Simula, Smalltalk, Flavours, Objective C, C++... Contribuição: Tipo Abstrato de Dados (encapsula estrutura de dados e comportamento) Banco de Dados e Inteligência Artificial - Contribuição: Modelos Semânticos de Dados (BD e IA); Abstrações (IA). Introdução a Programação Orientada a Objetos Algumas áreas que usam o Paradigma OO: – Linguagens de Programação – Modelagem de Dados – SGBD OO, SGBD Objeto-Relacional – Sistemas Operacionais – Processamento Distribuído – Gerência de Redes e Protocolos – Desenvolvimento de Software: análise, projeto e implementação. O que é um modelo??? Casa do Cachorro Sua Casa Prédio Empresa O que você consegue construir sem modelo??? O que é um modelo??? Importância da Modelagem Um modelo é uma simplificação da realidade; Possibilita a visualização e o controle da arquitetura do sistema; Facilita o entendimento do sistema sendo construído; Possibilita a identificação de oportunidades para a simplificação e a reutilização; Possibilita a especificação da estrutura e do comportamento do sistema; Possibilita a documentação das decisões tomadas. Importância da Modelagem Podemos concluir que: – Uma empresa bem sucedida é aquela que fornece software de qualidade e capaz de atender as necessidades dos respectivos usuários; – A modelagem é uma parte central de todas as atividades que levam a implantação de um bom software. Modelagem não Orientada a Objetos Raízes associadas às linguagens de terceira geração; Sistemas são decompostos em módulos; Módulos são decompostos em funções; Funções e dados são tratados em separado; Funções são ativas e dados são passivos; Funções precisam conhecer as estruturas dos dados; É problemático modificar estruturas dos dados; Dados fluem entre as funções. Modelagem Orientada a Objetos Comportamento e dados são mantidos integrados; Suportam classe, objeto e herança; Sugerem como identificar as classes; Sugerem como identificar responsabilidades; Classes agrupadas em hierarquias; Sugerem como identificar interações entre objetos. Engenharia de Software OO Engenharia de software é uma abordagem sistemática para o desenvolvimento de software; Enfatiza o entendimento antes do projeto e da codificação; A construção de modelos é um aspecto chave na engenharia de software; Um modelo é uma abstração de algum aspecto de um problema; Modelos são representados através de diagramas. Como introduzir a orientação a objetos ? Treinar equipe em orientação a objetos; Treinar equipe em linguagem de programação; Desenvolver pequenos programas; Desenvolver projeto piloto; Projeto piloto deve ser útil; Várias metodologias podem ser consideradas; Monitorar e avaliar cuidadosamente o projeto; Estipular um prazo para conclusão. Uma das preocupações da indústria de software é a necessidade de criar software e sistemas corporativos muito mais rapidamente e a um custo mais baixo. Para fazermos bom uso da crescente potência dos computadores, precisamos de um software de maior complexidade. Além de complexo, ele precisa também ser confiável e de alta qualidade. Por que orientação a objetos Em 1968, na Conferência de Engenharia de Software da NATO, utilizou-se pela primeira vez o termo “crise do software” para designar o mau momento que atravessava a indústria de software, que não possuía métodos adequados para suprir suas demandas. construção. – A partir daí surgiram muitos métodos para o desenvolvimento, todos eles com o intuito de superar a tal “crise do software”. Neste contexto, surgiu o paradigma da orientação a objetos. Por que orientação a objetos A programação orientada a objetos, concentra-se nos tipos de objetos cuja estrutura de dados pode ser manipulada somente com os métodos da classe de objetos. – As estruturas de dados se relacionam aos objetos e podem ser usadas somente com os métodos projetados para este tipo de objeto. Por que orientação a objetos A análise de sistemas no mundo orientado a objetos é feita analisando-se os objetos e os eventos que interagem com esses objetos. – Cada objeto executa uma função específica independentemente de outros objetos: responde a mensagens, sem saber porque a mensagem foi enviada ou quais serão as conseqüências. Por que orientação a objetos Conceitos existentes desde os anos 60: – ALGOL Início na área acadêmica - Simula 67: – Linguagem de simulação baseada em Algol. 1972 – Smalltalk: – Foi a primeira linguagem orientada a objetos construída. Ainda hoje serve como referência pois é totalmente orientada a objetos. É ainda restrita a pesquisas. Origens da orientação a objetos 1980s - Objective-X, C++, Eiffel… 1981 – Método OO – Matt Flavin 1984 – Interface GUI – Apple Macintosh 1990s - C++: – É a linguagem responsável pela aceitação em larga escala da Orientação a Objetos nos grandes projetos fora dos laboratórios de pesquisa. Ainda é muito utilizada onde performance é primordial. Origens da orientação a objetos – Linguagem C + Classes; – Classes: registros (Structs, Union, Class) + funções. 1990s – Java: – Tornou-se muito aceita pela capacidade de rodar seus programas em praticamente qualquer plataforma. Atualmente é a linguagem mais utilizada para desenvolvimento em larga escala de sistemas distribuídos em ambientes heterogêneos. Origens da orientação a objetos 1990s – ADA – Desenvolvida pelo Departamento de Defesa do USA, ainda é a linguagem oficial do governo americano. É muito utilizada por grupos de pesquisa e engenharia. Origens da orientação a objetos Orientação a Objetos Fundamentos e Conceitos O que é um Sistema OO? Um sistema Orientado a Objeto é modelado, implementado e efetivamente funciona como um conjunto de objetos que interagem entre si. Obj 1 Obj 2 Obj 4 Obj 3 Resumo do Funcionamento Os menores componentes do sistema são os objetos, onde são guardadas todas as informações. Os objetos secomunicam através de mensagens. As mensagens acionam os métodos dos objetos visando efetuar as ações e manipular as informações. Resumo do Funcionamento 1 // Fig. 2.1: Welcome1.java 2 // Programa de impressão de texto. 3 4 public class Welcome1 5 { 6 // método main inicia a execução do aplicativo Java 7 public static void main( String args[] ) 8 { 9 System.out.println( "Welcome to Java Programming!" ); 10 11 } // fim do método main 12 13 } // fim da classe Welcome1 Welcome to Java Programming! Paradigma de Orientação a Objetos Histórico, Conceitos e Terminologia Orientação a Objetos - Abreviações Orientação a Objetos - OO Análise Orientada a Objetos - AOO Projeto Orientado a Objetos - POO Implementação Orientada a Objetos - IOO Paradigma de Orientação a Objetos Surgiu na tentativa de solucionar problemas existentes no desenvolvimento de Softwares Complexos e Confiáveis com baixo custo de desenvolvimento e manutenção; Mundo Real é formado por objetos que se interagem; Representar esses objetos em um software é mais natural e permanente do que representar a sua funcionalidade (decomposição funcional), pois essa é mutável; Paradigma de Orientação a Objetos Idéia básica “Nós percebemos o mundo como uma coleção de objetos que interagem entre si”. “Maneira de ver as coisas, uma nova maneira de pensar” Permite que objetos do mundo real sejam mapeados em Objetos no computador; Visão do DOMÍNIO da aplicação é composto por OBJETOS que se comunicam através de MENSAGENS; Paradigma de OO = objetos + classificação + herança + comunicação (Coad e Yourdon, 1990); Modelo de Objetos – Objetos, Mensagens e Métodos. Tradicionalmente – Softwares são formados por dados e procedimentos independentes. Paradigma de Orientação a Objetos Paradigma OO – Softwares são formados, principalmente, por: Objetos – parte interna (define o comportamento do objeto, ou seja, especifica os métodos associados ao objeto). – parte externa (interface - maneira que o objeto se apresenta para outros objetos) Mensagens – Diminuir o gap semântico. Paradigma de Orientação a Objetos Paradigma de Orientação a Objetos O desenvolvimento orientado a objetos evoluiu no sentido: PROGRAMAÇÃO ANÁLISE Conceitos desse paradigma foram introduzidos com o surgimento da linguagem Smalltalk; Em seguida, surgiram métodos de projeto para dar suporte à implementação de sistemas orientados a objetos; Recentemente, propostas de métodos para análise e projeto vêm emergindo. Histórico A OO surgiu no final da década de 60, quando dois cientistas dinamarqueses criaram a linguagem Simula (Simulation Language). 1967 - Linguagem de Programação Simula-67- conceitos de classe e herança. O termo Programação Orientada a Objeto (POO) é introduzido com a linguagem Smalltalk (1983). FINS DOS ANOS 80 Paradigma de Orientação a Objetos: abordagem poderosa e prática para o desenvolvimento de software Histórico Linguagens híbridas: – C++ (1986), Object-Pascal (1986). Métodos de Análise e Projeto OO – CRC (Class Responsability Collaborator, Beecke e Cunningham, 1989). – OOA (Object Oriented Analysis, Coad e Yourdon, 1990) – Booch (1991). – OMT (Object Modeling Technique, Rumbaugh, 1991). – Objectory (Jacobson, 1992). – Fusion (1994). – Unified Modeling Language – “Notação” (UML, 1997). Benefícios Principais Reusabilidade. Redução da Complexidade. Garantia de Integridade. Processo de Construção de Sistemas Reusabilidade transforma o processo de construção de sistemas. Processo semi-artesanal. antes Processo de Montagem Reutilização de componentes já testados existentes em uma Biblioteca de Classes. depois Processo de montagem semelhante ao da indústria mecânica. Ganhos Decorrentes da Reusabilidade Aumento de produtividade – uso de bibliotecas de classes; – mecanismos de herança. Aumento de qualidade – uso de componentes testados e aprovados. Redução de Complexidade Maior facilidade de transição entre as fases: – mesmo paradigma desde a análise até a implementação; – não existe necessidade de conversões de modelos a cada fase. Redução de Complexidade Facilidade de modularização: – delimitação clara e precisa das fronteiras entre os objetos. Facilidade de manutenção – operações residem em um único lugar, não estando espalhadas e repetidas pelos programas. Garantia de Integridade Estruturas de dados só podem ser usadas por suas próprias operações. Paradigma de Orientação a Objetos Orientação a Objeto - Paradigma Enfoque, que representa o mundo real com objetos e suas interações. Orientação a Objeto - Paradigma Coisas do mundo real: mesas, papéis, animais. Objetos têm propriedade. Mesa – Feita de madeira; – Tem uma altura; – Tem uma localização. É possível exercer ações sobre objetos – Criar, destruir, mudar a localização. O que se ganha com Objetos? O comportamento do objeto é independente da representação interna dos dados; Dados são protegidos contra acesso indevido; Acesso, checagem de erro, etc., são concentrados em um único lugar; Extensibilidade, mudança de representação e adição de novo funcionamento pode ser feito de maneira incremental e com mínimo distúrbio no sistema como um todo. O que é Software OO? Software organizado como uma coleção de objetos interdependentes cada um fornecendo um serviço específico através de sua interface; Objetos são entidades comuns do domínio da aplicação; Sistemas modelam diretamente a interação entre estes objetos no ambiente computacional. OO - Benefícios Os conceitos de OO: – Facilitam a reutilização de código; – Forçam a modularização dos sistemas e; – Oferecem suporte a dados complexos e programação baseada em eventos. OO - Terminologia A programação OO apoia-se basicamente nos princípios de: – Objeto; – Abstração; – Mensagem; – Polimorfismo; – Herança; – Classe; – Encapsulamento; – Método; – Instancia. Abstração Mecanismo utilizado na análise de um domínio. Através dela, o indivíduo observa a realidade e dela abstrai entidades, ações, etc. consideradas essenciais para uma aplicação, excluindo todos os aspectos julgados irrelevantes. Exemplo: – Fotografia por satélite (imagem da realidade), despida de alguns aspectos (por exemplo, cor, movimento). – Da foto, pode-se abstrair um mapa, que elimina diversas propriedades da foto (detalhes particulares de um edifício ou praça). O mapa pode ser a base para abstrair um grafo. Abstração “a beleza está nos olhos de quem a vê” O resultado de uma operação mental de abstração depende não tanto do fenômeno observado, mas do interesse do observador. Abstração “a beleza está nos olhos de quem a vê” O que é isto??? É o Frajola??? É um gatinho??? É um mamífero??? É um felino??? É um peludo??? É um ladrão??? Abstração “a beleza está nos olhos de quem a vê” Depende do ponto de vista: Dona: animal de estimação; Veterinário: um sistema de órgãos; Piu-Piu: um inimigo. ➢ É o princípio de ignorar aspectos de um assunto não relevante para o propósito em questão, tornando possível uma concentração nos assuntos de maior interesse. ➢ É como se estivéssemos observando, com um binóculo, um elemento, por um de seus lados apenas (aquele que interessa no momento). ➢ Uma abstração permite capturarum determinado aspecto existente em uma realidade, eliminando detalhes irrelevantes. Acho que vi um “gatinho”... Abstração “a beleza está nos olhos de quem a vê” Diferentes abstrações a partir de um mesmo objeto do mundo real. Maça Peso cor da casca format CATEGORIA Receita AÇÃO 3 I, II, Cardinalidade do conjunto ATRIBUTO Operações de Abstração: relevantes para a modelagem conceitual Classificação (Instanciação) – categorização dos objetos em grupos e/ou classes (categoria), com base em algum conjunto de propriedades comuns. – Reúne as propriedades comuns a um conjunto de conceitos. – Abstrai todas as características que não são compartilhadas por todos. De um grupo heterogêneo busca um conceito comum. Exemplo: a classe Jornal define propriedades comuns aos objetos “Correio Brasiliense”, “Folha de São Paulo”, ... O resultado da aplicação da abstração de Classificação sobre um conjunto de objetos é uma Classe de Objetos. Generalização (Especialização) – a partir de duas categorias abstrai-se uma categoria mais genérica. Sub-categorias satisfazem todas as propriedades das categorias de que elas constituem especializações. – Deve existir pelo menos uma propriedade que distingue duas categorias especializadas. Operações de Abstração relevantes para a modelagem conceitual Agregação (Decomposição) – composição de uma nova categoria como um agregado de categorias pré-existentes. – instâncias de uma categoria (Estudante) são compostas por instâncias de outras categorias (Nome, Endereço). Classificação/Instanciação Estudante de Graduação José Maria CLASSIFICAÇÃO INSTANCIAÇÃO CATEGORIA INDIVÍDUO (Objeto) Classificação/Instanciação Estudante de Graduação CATEGORIA José Maria CLASSIFICAÇÃO INSTANCIAÇÃO Membro do Coral INDIVÍDUO (Objeto) Generalização/Especialização Estudante GENERALIZAÇÃO ESPECIALIZAÇÃO (herança) CATEGORIA CATEGORIA Estudante de Pós- Graduação Estudante de Graduação Generalização/Especialização Mamífero GENERALIZAÇÃO ESPECIALIZAÇÃO (herança) CATEGORIA CATEGORIA Baleia Atributos •sangue quente •vertebrado •vivíparo Atributos •Habitat: mar •Tempo médio de vida: 200 anos Agregação/Decomposição Casa AGREGAÇÃO (composição - síntese) DECOMPOSIÇÃO (refinamento - análise) CATEGORIA CATEGORIA/COMPONENTE ParedePorta Aspectos OO Modelo de Objetos – Objeto; – Mensagem; – Método. Classe Atributo Protocolo Classificação Herança Encapsulamento/Ocultamento de Informação Polimorfismo. Objeto Tudo em Orientação Objeto é OBJETO; Objeto, no mundo físico, é tipicamente um produtor e consumidor de itens de informação: exemplo: máquina, comandos, arquivos, pessoas, sinais. Definição (mundo do software): – “Qualquer coisa, real ou abstrata, a respeito da qual armazenamos dados e métodos que os manipulam” Martin, Odell (1995); – Abstração de uma entidade do mundo real de modo que essa entidade possui várias características; Exemplo: objetos: cachorro e casa. Objeto • Substantivo (entidade do mundo real). • Uma ocorrência específica (instância) de uma entidade. • Um “Pacote” que contém procedimentos e dados relacionados. •Todo objeto tem: Identidade Estado Comportamento Objeto • Identidade é a propriedade que distingue um objeto dos outros (Obrigatório). Esta identidade de objeto deve ser única, uniforme e independente do conteúdo do objeto. • Estado é o conjunto das propriedades de um objeto e seus valores atuais (Opcional). • Comportamento é representado pelas ações e reações do objeto em termos de seu estado e de troca de mensagens (Opcional). Estado de um Objeto O conjunto dos valores dos atributos de um objeto em determinado tempo que define o seu estado. nome, nascimento, profissão, . . . Pedro 14/05/68 marceneiro Comportamento de um Objeto Representado por uma abstração, algo com limites nítidos e significado em relação ao problema em causa. As funcionalidades de um objeto estão relacionadas ao seu comportamento. Um objeto sabe como executar o seu trabalho e possui informação dentro de seu próprio escopo. CACHORRO •Raça •cor •pedigree CASA OBJETO: Entidade independente, composta por um conjunto de elementos que a caracterizam (domínio) e as ações que agem sobre esse domínio (operações); OBJETO DOMÍNIO + OPERAÇÕES Objeto Visão implementacional (Takahashi, 1990) Entidade composta por: – ESTADO INTERNO: é onde os valores podem ser armazenados e modificados ao longo da vida do objeto, caracterizando seu domínio; – COMPORTAMENTO: é o conjunto de ações pré- definidas (denominadas métodos) através das quais o objeto responderá a demanda de processamento por parte de outros objetos. Objeto Objeto é algo DINÂMICO: é criado por alguém, tem uma vida, e morre ou é morto por alguém; Pode ter vida temporária (como a execução de um programa) ou persistente (persistirá até que seu desaparecimento seja explicitamente ordenado). Objeto Mapeamento Abstração Implementação DOMÍNIO + OPERAÇÕES ABSTRAÇÃO ATRIBUTOS (Dados) + MÉTODOS (Procedimentos) IMPLEMENTAÇÃO <Nome do Objeto> <Atributos> <Métodos> Objeto Objeto Resumindo: – Pacote de informações (atributos) e a descrição de suas operações (métodos), de modo que elas são intrínsecas ao seu domínio e este é formado pelos elementos que o caracterizam. – Exemplo: Objeto: Pessoa Atributos: Nome, Data de Nascimento, Cor Métodos: Acordar, Comer, Beber Dormir. Objeto: Pessoa Nome Data Nascimento Cor Acordar Comer Beber Dormir Objeto Exemplo – uma Pessoa e um Carro podem ser considerados como um objeto de dados no sentido de que qualquer um deles pode ser definido em termos de um conjunto de atributos e operações. Objetos podem relacionar-se um com o outro; Uma Pessoa pode possuir Carro, onde o relacionamento possuir define uma conexão específica entre Pessoa e Carro. Objeto = Atributos (Dados) + Métodos (Funcionalidade) + Encapsulamento Objeto Exemplos de Objeto Uma fatura; Uma organização; Uma tela com a qual o usuário interage; Um desenho de engenheiro; Um avião; Um vôo de avião; Uma reserva num avião; Um processo de atendimento de pedidos; Um computador; Um ser humano neurótico pode ser estereotipado como um objeto: possui memória em que valores podem ser armazenados e que condicionarão seu comportamento. Exemplos de Objeto “Revista 4x4 e Cia” é uma INSTÂNCIA da Classe Revista, ou seja, um OBJETO dessa classe. … //Instanciando um Objeto da Classe Revista Revista revista4x4 = new Revista(); … Atributos Representam um conjunto de informações, ou seja, elementos de dados que caracterizam um objeto; Descrevem as informações que ficam escondidas em um objeto para serem exclusivamente manipulado pelas operações daquele objeto; São variáveis que definem o estado de um objeto, ou seja, são entidades que caracterizam os objetos; Cada objeto possui seu próprio conjunto de atributos; Atributos Exemplos: – Objeto Pessoa Atributos: Nome, Cor, Data de Nascimento. – Objeto Empregado Atributos: Nome do empregado, nome do departamento, salário, endereço, dependentes. Atributos Definem as características do objeto. Um objeto pode ser composto por um ou mais atributos, que pertencem apenas a ele e não dependemde qualquer outra estrutura complementar. Classe Atributos Métodos Dicionário Objeto do mundo Real Objeto: Dicionário Atributos: Código Título,Editora. Adicionar Palavra Eliminar Palavra Encontrar Palavra Imprimir definição Atributos Atributos Um valor armazenado pelos objetos da classe – PESSOA: nome, idade, peso, cor. – CARRO: cor, peso, ano, modelo. – Cada atributo possui um valor para cada instância. – João tem 24 anos e Maria tem 40. Não se deve explicitar identificadores (características de programação - não têm significado intrínseco) – Não confunda identificadores internos com atributos do mundo real; Atributos – O número do seguro social, número da chapa do carro, número do telefone, RG não são identificadores internos. ELES são atributos, pois têm significado no mundo real. ATRIBUTOS LEGÍTIMOS. Identificação de Objetos O processo de análise para identificação dos objetos e classes DIFÍCIL Basicamente a mesma tarefa realizada na análise e no projeto de sistemas (Análise Estruturada). Os domínios de aplicação que naturalmente refletem entidades concretas do mundo real se beneficiam da abordagem OO. Identificação de Objetos Objetos podem ser: – Entidades Externas que produzem ou consomem informações (outros sistemas, pessoas). – Coisas que fazem parte do domínio (relatórios, displays, cartas). – Eventos que ocorrem no contexto do sistema (transferência de propriedade). – Papéis desempenhados por pessoas (gerente, engenheiro, vendedor). – Unidades organizacionais (grupo, equipe). – Lugares que estabelecem o contexto do problema (piso de fábrica, área de descarga). Classificação Categorização em Classes: Quando estamos modelando um domínio (problema), observamos que há várias entidades similares que podem ser abstraídas em um conceito único que engloba esta similaridade; Operação de abstração das Similaridades; A Programação Orientada a Objeto incorporou esta operação através da abstração dos atributos e dos métodos que caracterizam objetos semelhantes, especificando-os na CLASSE; Exemplo: – Classificação de espécies em Zoologia. Classe Objeto: abstração de uma entidade do mundo real, através dos atributos e operações; Classe: abstração de um conjunto de objetos similares do mundo real; Agrupamento de objetos similares. Descreve a – estrutura de dados, e o – comportamento de objetos similares. Todo objeto é uma instância de uma Classe; Todas as instâncias de uma classe têm valores próprios para os atributos especificados na classe; Classe Os objetos representados por determinada classe diferenciam-se entre si pelos valores de seus atributos; Sistema puramente OO, Classe é também um Objeto. É o agrupamento de objetos que possui uma certa correlação entre atributos e serviços. •Exemplo: Automóvel (Classe) Um objeto é uma instância de uma classe Identidade Classe Classe Classe: representa um “gabarito” para muitos objetos e descreve como estes objetos estão estruturados internamente. Ela define os atributos e comportamentos comuns compartilhados por um tipo de objeto. Classe Conjunto de objetos que possuem propriedades semelhantes (ATRIBUTOS), o mesmo comportamento (MÉTODOS), os mesmos relacionamentos com outros objetos e a mesma semântica. Todo objeto é instância de apenas uma única classe. – PESSOA, CARRO, CASA, VEÍCULO; – EMPRESA, PAÍS, SERES HUMANOS, HOMENS, MULHERES, MEIO DE TRANSPORTE. Uma vez que uma instância de uma classe é criada, se comporta como todas as outras instâncias de sua classe. Representação de Classes pessoas Pedro 14/05/68 marceneiro pessoas Carla 25/10/71 médica pessoas Paulo 22/08/64 motorista pessoas João 10/10/75 marceneiro pessoa nome nascimento profissão dançar pular vestir Instâncias Na definição de uma classe, descreve-se que propriedades -- ou atributos -- o objeto terá e os métodos aplicados a eles. Os atributos são nomeados e armazenam o estado abstrato de cada objeto. Classe Similar a um TAD (Tipo-Abstrato-de-Dados): pode ser usado como base para a criação de objetos que sejam entidades executáveis com atributos e operações (métodos) da classe. Sua especificação é uma especificação da interface na qual as partes visíveis da entidade são expostas. Os objetos criados podem ter outros atributos e procedimentos privativos não aparecem na especificação. DicionárioRelatórioBíblia Livro Classe CASA Portas Quartos Salas Localização Cozinha Telhado Reformar Limpar Pintar Mobiliar Classe Características Exemplo de objeto do mundo real – “a coisa em que você está sentado agora” Cadeira Mobiliário É membro - (instância) de uma classe maior de Objetos. Classe Mobiliário Custo Peso Dimensões Localização Cadeira Atributos (Propriedades) herda Cor Comprado Vendido Modificado Operações (Serviços e Métodos) O Objeto Cadeira é um membro (INSTÂNCIA) de uma CLASSE maior de objetos – MOBILIÁRIO. CLASSE de objetos descreve um conjunto de objetos que possuem: – propriedades semelhantes (ATRIBUTOS); – mesmo comportamento (MÉTODOS); – mesmos relacionamentos com outros objetos; – mesma semântica. Classe Atributos GENÉRICOS da classe MOBILIÁRIO: – custo, dimensões, peso, localização, cor. Atributos se aplicam a todos os objetos da classe MOBILIÁRIO: mesa, cadeira, sofá, armário. Uma vez que o objeto CADEIRA é um membro da classe MOBILIÁRIO, HERDA todos os atributos definidos para a classe. – Comprado; – vendido, pesado; – modificado (pintar de roxo, serrar uma perna). Classe O objeto herda todos os atributos e as operações da classe Classe: Mobiliário Custo Dimensões Peso Cor Localização Comprar Vender Pesar Modificar Classe: Cadeira Custo Dimensões Peso Cor Localização Comprar Vender Pesar Modificar Classe: Mesa Custo Dimensões Peso Cor Localização Comprar Vender Pesar Modificar <Nome da classe> <Atributos> <Operações> Classe Exemplo de uma Classe Java Exemplo de uma Classe Java Class Abastecimento { float litros; float custo; date horário; } Exemplo de uma Classe Java public class Contador { private int num; private int inicio; public Contador(int valorInicial) { inicio = valorInicial; num = inicio; } public void incrementa() { num = num + 1; } public int mostraNum() { return num; } } Atributos Métodos Instanciando uma Classe Em Java as classes são instanciadas através do comando new. A execução do comando cria um objeto e retorna uma referência. • A variável abastecimentoA armazena o identificador do objeto. • Antes de criar um objeto é necessário criar a variável onde o identificador será armazenado. O objeto CADEIRA e outros da mesma classe ENCAPSULA: – Dados (os valores dos atributos que definem a cadeira); – Operações (as ações aplicadas para mudar os atributos da cadeira). Classe CASA Portas Quartos Salas Localização Cozinha Telhado Reformar Limpar Pintar Mobiliar PRAIA FAVELA MANSÃO Limpar Piscina Contratar Criadagem Piscina Quadras (Superclasse) (Subclasse) Especialização Generalização Animal Selvagem Doméstico Gato Cão De Raça Vira-Lata Rex superclasse subclasse Objeto Rex instância da classe Vira-Lata Hierarquia de Classes Herança Mecanismoque permite definir uma nova classe (subclasse) a partir de uma classe já existente (superclasse). Ao se estabelecer uma Especialização (subclasse) de uma classe, a subclasse herda as características comuns da superclasse, isto é, a especificação dos atributos e dos métodos da superclasse passam a fazer parte da especificação dos atributos e dos métodos da subclasse. – A subclasse pode adicionar novos métodos, como também reescrever métodos herdados. Habilidade de um objeto derivar seus atributos (dados) e métodos (funcionalidade) automaticamente de outro objeto. Seres Humanos Nome Data_Nascimento RG Mulher Data_Último_Parto Homens Certif_Reservista Herança - Exemplo Herança - Exemplo Herança Classes podem ser construídas a partir de outras já existentes; facilita extensibilidade; Quando uma mensagem é enviada para um objeto: – A procura do método correspondente começa pela classe do objeto; – Se o método não for encontrado, a procura continua na superclasse. Herança A Herança pode ser de dois tipos: – Herança Simples: quando uma classe é subclasse de somente uma superclasse; – Herança Múltipla: quando uma classe é subclasse de várias superclasses e conseqüentemente herda as características de cada uma delas. Herança Processo de Herança – Gera uma nova classe a partir de uma classe (Herança Simples) ou várias classes (Herança Múltipla); – A subclasse herda da super-classe: variáveis de instância (Atributos); Métodos. – Na subclasse pode-se: acrescentar variáveis de instância (atributos) e métodos (propriedades); redefinir/inibir propriedades herdadas. Veículo Veículo de Rodas Veículo à Motor Veículo Aéreo Bicicleta Caminhão Vapor PlanadorAvião Caminhão VW Caminhão Ford Caminhão GM Herança - Exemplo Veículos Terrestres Aéreos Aquáticos E S P E C I A L I Z A Ç Ã O G E N E R A L I Z A Ç Ã O Carro Moto Iate Lancha Avião Helicop (Classe Base) (Classes Derivadas) (Objetos) Exemplo: Sistema de Administração Universitária Pessoa Estudante Docente Funcionário Graduação Pós-Graduação Assistente Herança Múltipla Nome, Data de Nascimento. RG Nascer, Comer, Dormir, Morrer Matrícula (registro) Cursar Herança pessoa cliente funcionário horista mensalista Super-Classe de cliente e funcionário subclasse de pessoa Super-Classe de horista e mensalista Herança Múltipla Veículo Terrestre Aquático Anfíbio Super-Classe de Terrestre e Aquático Subclasse de Veículo Super-Classe de Anfíbio Super-Classe de Anfíbio Subclasse de Terrestre e Aquático Exemplo de Herança em Java class Pessoa { String nome; int peso; } class Funcionario extends Pessoa { float salario; } Exemplo de Herança em Java public class Empresa { public static void main(String args[]) { Funcionario func = new Funcionario(); func.nome = “Joao da Silva”; func.peso = 70; func.salario = 2000.00f; System.out.println(“Funcionario “ + func.nome + “ Salario “ + func.salario); Pessoa p1 = new Pessoa(); p1.peso = 60; p1.nome = “Pedro”; p1 = func; // OK func = p1; // Oops! } } Relacionamento entre Classes Associação; Especialização / Generalização; Agregação / Decomposição. Associação Define uma relação contextual entre classes; Para representar o fato de que objetos podem se relacionar uns com os outros, utiliza-se a associação. Representa que duas classes possuem uma ligação (link), significando por exemplo que elas "conhecem uma a outra”. Pode haver mais de uma associação (com nomes diferentes) entre o mesmo par de classes. Possui um nome (junto à linha que representa a associação), normalmente um verbo. pessoa empresaÉ cliente funcionário empresapertence Para melhor esclarecer o significado de uma associação é definido três recursos de notação: – Nome da associação: fornece algum significado semântico a mesma. – Direção de leitura: indica como a associação deve ser lida. – Papel : para representar um papel específico em uma associação. Nome de associação, direção de leitura e papéis Exemplo:Nome de associação, direção de leitura e papéis contratante * contratado * Contrata Organização Indivíduo Papel Nome da associação Papel Direção de leitura Empresa Pessoa Trabalha-para Empregaempregador empregado Associação - Multiplicidade O mesmo que Cardinalidade. Valores possíveis. 1 Exatamente 1 0..* Zero ou mais (opcional) 1..* Um ou mais (obrigatório) 0..1 Zero ou um 5..8 De 5 a 8 4..7, 9 De 4 a 7 + 9 Exemplo: Multiplicidade Cliente Pedido 1 0..* efetua Composição Permite a definição de um conceito complexo a partir da combinação de conceitos mais simples. – Composição pode ser recursiva. Especialização Criação de uma nova classe, a partir de outra já existente, com novos atributos que a tornam mais restrita. É o relacionamento entre uma super- classe e suas subclasses. pessoa nome nascimento profissão calculaIdade() cliente limiteCrédito funcionário contratação matrícula calculaSalario() mensalista salario horista valorHora Agregação É a operação inversa da Especialização; É a remoção de uma ou mais características de determinada classe, de modo a formar uma classe mais abrangente; É o ato de agregar duas ou mais classes para formar uma nova classe; É representado por um relacionamento do tipo “é-uma- parte-de”, ou “tem-um”; Indica o sentido de navegabilidade (leitura) entre os objetos; Agregação Micro monitor mouse teclado gabinete CPU RAM fonte Exemplo: Super-Classes de Gabinete Sub-Classe de Gabinete, Teclado,etc Mensagem É o mecanismo através do qual os objetos se comunicam, invocando as operações desejadas. Especificação de uma operação do objeto. É composta por: – Seletor: nome simbólico que descreve o tipo da operação; descreve O QUE o objeto que envia quer que seja invocado, não como deveria ser invocado; o objeto recebedor da mensagem contém a descrição de COMO a operação deveria ser executada; – Parâmetros: argumentos que uma mensagem pode conter que faz parte da operação e requer uma ordem única. Coma cogumelos! Comer Objeto: Animal Mensagem: COMA COGUMELOS Seletor: COMA Parâmetros: COGUMELOS Animal Pessoa Objeto que recebe RECEPTORObjeto que envia EMISSOR Determina o que deve ser manipulado e aguarda o retorno do objeto que foi ativado Determina como manipular Mensagem Um objeto (Emissor) envia uma mensagem a outro (Receptor) que executará o serviço; Métodos são invocados por Mensagens; Exemplo – A chamada de um procedimento/função em Linguagem de Programação é uma aproximação inicial de uma mensagem, como em P(10,20), onde P é o seletor e os valores 10 e 20 são os parâmetros. – Diferença: a ação da mensagem a ser ativada depende essencialmente do objeto que receber a mensagem. Para enviar uma mensagem deve-se: – identificar o objeto que receberá a mensagem; – identificar o método que o objeto deve executar; – passar os argumentos requeridos pelo método. Mensagem Os objetos se comunicam enviando mensagens. Métodos são procedimentos que são invocados enviando-se mensagens (chamada de função) para as instâncias da classe. Dados Dados Dados Métodos Métodos Métodos Mensagens Evento do MundoReal Evento de Saída Exemplo de uma Mensagem Java public class TesteContador { public static void main (String args[]) { Contador c = new Contador(10); c.incrementa(); System.out.println (c.mostraNum()); c.incrementa(); System.out.println (c.mostraNum()); } } mensagem Exemplo de uma Mensagem Java class Contacorrente { public void sacar (float valor) { // Codigo do método} // restante da definição da classe // } Class Contapoupança { public void sacar (float valor) { // código do método // } // definição do restante da classe } // as classes são instanciadas agora Contacorrente a = new Contacorrente (); Contapoupança b = new Contapoupança(); // Enviando mensagens para os objetos a.sacar(100); // executado sacar() definido em Contacorrente. b.sacar(200); // executado sacar() definido em Contapoupança. Métodos Origem: Linguagem de Programação Smalltalk; Quando um objeto é mapeado dentro do domínio do software, os processos que podem mudar a sua estrutura de dados são denominados Operações ou Métodos; Métodos são invocados por Mensagens; Cada objeto possui seu próprio conjunto de métodos. Métodos Definições: – São procedimentos definidos e declarados que atuam sobre um objeto ou sobre uma classe de objetos; – Descrição de uma seqüência de ações a serem executadas por um objeto; – Através dos métodos que especifica-se a um objeto COMO FAZER alguma coisa; – São intrínsecos aos objetos e não podem ser separados. Descrevem as ações que um objeto pode executar ou seja suas funcionalidades. Os métodos definem os serviços que podem ser solicitados a uma instância. Verbo (ação - função). andar, correr, vestir . . . Métodos Objeto Método Método Método Método Dados Métodos Estrutura Geral Classe, Atributos e Métodos Classe das contas correntes número banco agencia nome saldo Depositar ( ) Sacar ( ) Métodos Atributos Estrutura Geral Contador int num int início void incrementa() int mostraTotal() métodos dados (ou atributos) Estrutura Geral Visibilidade Os atributos e os métodos de uma classe podem ser públicos ou privados. Os atributos públicos podem ser acessados a partir de métodos membros das classes ou de métodos membros de outras classes. Os atributos privados estão encapsulados dentro da classe, só podendo ser acessados a partir dos métodos membros da classe. Estrutura Geral Visibilidade Os métodos públicos podem ser chamados tanto a partir de outros métodos da mesma classe quanto a partir de métodos membros de outras classes. Os métodos privados só podem ser chamados a partir de métodos membros da mesma classe. Em JAVA as palavras-chave private e public são usados para determinar a visibilidade dos atributos e métodos. Estrutura Geral Visibilidade Os métodos públicos definem a interface com as instâncias. Os métodos privados são úteis quando é necessário definir trechos de código que precisam ser executados a partir de mais de um método da classe, mas não a partir de outras classes. Estrutura Geral Visibilidade Privado: restringe o acesso apenas à classe Protegido: restringe o acesso à classe e às subclasses. Público: permite acesso a todos e a qualquer um. Exemplo Public e Private public class Contador { private int num; private int inicio; public Contador(int valorInicial) { inicio = valorInicial; num = inicio; } public void incrementa() { num = num + 1; } public int mostraTotal() { return num; } } Interface Objetos se comunicam através de Mensagens, que invocam os Métodos desejados; Parte Privada do Objeto (Visão Interna) – Métodos; – Atributos; Parte Compartilhada do Objeto ou Interface – corresponde à parte externa do objeto, isto é, àquela que é vista por outros objetos com a finalidade de invocar os métodos que o objeto realiza; Interface – agrupa um conjunto de mensagens que o objeto pode responder; – as mensagens especificam quais operações sobre o objeto podem ser realizadas, mas não como a operação será executada. Estrutura de um Objeto (classe) <Nome do Objeto> <Atributos> <Métodos> Interface <Métodos> Parte Privada Ocultamento de Informação (Information Hiding) Característica que visa esconder detalhes de implementação É alcançado em OO, visto que o objeto, quando implementado, possui uma parte privada (atributos e métodos) e uma parte compartilhada (interface) Detalhes de implementação ficam escondidos na parte privada. informações e operações Encapsulamento Ocultamento de Informação (Information Hiding) Programadores podem introduzir mudanças na implementação de um método sem afetar o comportamento externo desse método. Cada componente de um programa deve agregar toda a informação relevante para sua manipulação como uma unidade (uma cápsula ou uma caixa- preta). Visão do mundo real: • sempre escondemos do mundo externo alguns atributos pessoais; • definimos, através de ações se iremos ou não externar estes atributos. Salário getSalário Salário * 0.25 O Cunhado Salário/2 O Leão do Imposto de Renda salário/10 A namoradinha Ocultamento de Informação (Information Hiding) Encapsulamento de Dados Objetos encapsulam suas estruturas de dados (atributos). Os atributos de um objeto só podem ser manipulados pelos próprios métodos do objeto. Restringe a visibilidade do objeto mas facilita o reuso. Os DADOS e os MÉTODOS são empacotados sob um nome e podem ser reusados como uma especificação ou componente de programa. Encapsulamento de Dados: Exemplo public class Pessoa { private double salario; public double getSalario(Object quem_Pergunta) { if (quem_Pergunta instanceof Namorada) { return (salario / 2); } if (quem_Pergunta instanceof Cunhado) { return (salario / 10); } if (quem_Pergunta instanceof LeaoImpostoDeRenda) { return (salario * 0.25); } return (0.0); // esconde o salario do resto !!! } } Polimorfismo Ao receber uma mensagem para efetuar uma Operação, é o objeto quem determina como a operação deve ser efetuada, pois ele tem o comportamento próprio. Como a responsabilidade é do Receptor e não do Emissor, pode acontecer que uma mesma mensagem ative métodos diferentes, dependendo da classe de objeto para onde é enviada a mensagem. Permite a criação de várias classes com interfaces idênticas, porém objetos e implementações diferentes. Capacidade de uma mensagem ser executada de acordo com as características do objeto que está recebendo o pedido de execução do serviço. • É a propriedade de uma ou mais classes responderem a mesma mensagem, cada uma de uma forma diferente. •Exemplo: • A função + : • aplicada a dois números produz adição; a • plicada a dois strings produz a concatenação. Polimorfismo: Exemplo class Contacorrente { public void sacar (float valor) { // Codigo do método} // restante da definição da classe // } Class Contapoupança { public void sacar (float valor) { // código do método // } // definição do restante da classe } // as classes são instanciadas agora Contacorrente a = new Contacorrente (); Contapoupança b = new Contapoupança(); // Enviando mensagens para os objetos a.sacar(100); // executado sacar() definido em Contacorrente. b.sacar(200); // executado sacar() definido em Contapoupança. Polimorfismo: Exemplo abstract class Funcionario { // ... atributos// ... métodos // método polimórfico que calcula desconto diferenciado // recebe uma referencia do tipo da superclasse public static double calculaDesconto (Funcionario func) { double desconto = 0; // se o parâmetro recebido for do tipo Gerente: 27% if (func instanceof Gerente) { desconto = salario * 0.27; } // se o parâmetro recebido for do tipo Secretária: 16% else if (func instanceof Secretaria) { desconto = salario * 0.16; } return desconto }}} Acoplamento Associação ao nome de variável, o número de bytes que ela ocupa, uma localização de memória. Associação ao nome de uma operação, o endereço inicial de seu código. Pode ser feito de duas maneiras: – Acoplamento antes da execução - “Early Binding”: (durante a link edição). Acoplamento – Acoplamento tardio ou durante a execução - “Late Binding”: permite que a linguagem tenha uma grande flexibilidade, mas encarece o custo do tempo de execução devido ao “overhead” da associação. quando uma mensagem é enviada a um objeto, o método que deve responder a essa mensagem é identificado dinamicamente, em tempo de execução, na classe do objeto. Acoplamento:Exemplo class Funcionario { String nome; // atributos com acesso livre double salario; } class Exemplo { public static void main (String args[]) { Funcionario f = new Funcionario(); f.nome = “João”; // alteração direta do valor do atributo f.salario = 1350.87; } } Analogia dos conceitos principais na POO e no paradigma tradicional de programação Linguagens Orientadas a Objetos Objeto Classe Mensagem Método Interface Linguagens Tradicionais Valor Tipo Abstrato de Dados(TAD) Chamada de Procedimento Procedimento ou Função Conjunto de nomes e funções para um fim específico. Referências Bibliográficas Exercícios Teóricos 1- Explique o que é objeto. 2- Cite e explique as propriedades de um objeto. 3- Escolha 3 objetos tangíveis, e identifique algumas de suas características (somente atributos e operações): disciplina, curso, carro, produto, cliente, aluno, livro, avião, medicamento, funcionário, termômetro e pedido. 4- Explique o que é encapsulação e cite os principais benefícios da encapsulação. 5- Explique e exemplifique as seguintes abstrações do Paradigma OO: a) Classificação. b) Instanciação c) Especialização. 6- Desenhe a representação de uma Classe e explique cada uma das partes. 7- Defina herança e polimorfismo. Exercícios Práticos 1) Suponha que, no programa que controla uma bomba de combustível, exista uma classe que descreva os abastecimentos. Sobre um abastecimento, são armazenados as informações: custo do litro, número de litros, custo do abastecimento. Utilizando os métodos na classe, é possível: informar o custo do litro, iniciar um abastecimento, incrementar o contador de litros, encerrar um abastecimento. Uma vez encerrado um abastecimento, é possível: obter o número de litros e o custo do abastecimento. Implemente a classe descrita. 2) Implemente um catálogo telefônico. Utilizando o catálogo será possível acessar as seguintes informações: nome, telefone e endereço. Os elementos do catálogo conterão informações sobre os assinantes. Implemente uma classe onde seja possível inserir um novo telefone, remover um telefone e procurar um telefone a partir do nome do assinante. Exercícios Práticos 3) Implemente um programa que armazene as seguintes informações sobre os funcionários de uma empresa: nomes, nomes dos departamentos onde trabalham, números dos telefones destes departamentos, endereços das filiais( rua, cidade, código postal , país). As informações relacionadas poderão ser atualizadas e pesquisadas e devem ser armazenadas. Exercícios Práticos
Compartilhar