Orientação à Objetos 1 Tópicos abordados Paradigmas de desenvolvimento Princípios de OO Conceitos de OO Benefícios 2 Objetivos Compreender os conceitos básicos de OO Entender as diferenças entre os paradigmas tradicionais Entender exemplos práticos de utilização de OO 3 Paradigma de Desenvolvimento de Software Ferramentas, metodologias e ambientes dependem do Paradigma de Desenvolvimento Paradigma é a “filosofia” adotada na construção do software: Lógico, Funcional, Procedimental, Orientado a Objetos, etc... 4 Paradigma Procedimental Visão de desenvolvimento baseada em um modelo entrada-processamento-saída Dados são considerados separadamente das funções Funções, são ativas e têm comporta-mento Dados são repositórios passivos de informação afetados por funções 5 Paradigma Procedimental Dados Dados Dados Processamento Resultado 6 Paradigma Procedimental Exemplo: Calcular a folha de pagamento de um departamento Adiantamento do João Salário do Pedro Demissão da Joana Dependentes da Maria Processamento Férias do Antônio Salário da Maria Prêmio da Helena Custo Total 7 Paradigma Orientado a Objetos Pressupõe que o mundo é composto por objetos Objeto é uma entidade que combina estrutura de dados e comportamento funcional Os sistemas são modelados como um número de objetos que se interagem 8 Paradigma OO Utiliza uma perspectiva mais humana de observação da realidade, incluindo objetos, classificação e compreensão hierárquica 9 Procedimental vs OO 10 O que é OO? “Orientação à objetos é uma estratégia para organizar sistemas como coleções de objetos que interagem entre si e combinam dados e comportamento” 11 Princípios básicos de OO Orientação à Objetos Abstração Modularidade Encapsulamento Hierarquia 12 Abstração Anfíbio Computador Construção 13 Abstração Construção de um modelo para representação de uma realidade Foco em aspectos essenciais de uma aplicação enquanto ignora os detalhes Preserva a simplicidade do projeto 14 Abstração Construção de um modelo para representar a realidade Automovel modelo preco ... atualizaPreco() ... 15 Encapsulamento Esconde a implementação interna da especificação externa Clientes conhecem somente a interface Clientes dependem da interface e não da implementação 16 Encapsulamento Oferece os seguintes tipos de proteção O estado interno de um objeto não pode ser corrompido por um cliente Mudanças internas não têm impacto sobre os clientes Facilita a manutenção e diminui o seu custo 17 Objeto DVD voltar() pausar() avancar() carregarDisco() alterarHora() parar() tocar() 18 Modularidade Módulo de estoque Módulo de faturamento Módulo de clientes Sistema de vendas Módulo de canais de venda 19 Modularidade A quebra de algo complexo em pedaços menores que sejam gerenciáveis Melhor entendimento do sistema Partes podem ser desenvolvidas separadamente 20 Modularidade Cuidado com a coesão e o acoplamento!!!! “Deve-se maximizar a coesão, enquanto minimiza-se o acoplamento.” 21 Aumenta a abstração Hierarquia Define níveis de abstração Animal Forma Polígono Triângulo Retângulo Mamífero Homem Leão Ave Diminui a abstração 22 Hierarquia Criação de níveis de abstração Base conceitual para permitir extensibilidade do software Reuso de código e comportamento 23 Conceitos básicos de OO Objeto Classe Atributo Operação Interface (Polimorfismo) Pacote Relacionamentos 24 O que é um objeto? “Um objeto é um conceito, abstração ou coisa com limites e significado para uma aplicação” Um objeto deve ter: Estado Comportamento Identidade única 25 Exemplos de Objetos Opala placa AAM1921 Gisele Bündchen Johnnie Walker Black Label 26 Classe Classes especificam a estrutura e o comportamento dos objetos Classes são como "moldes" para a criação de objetos Objetos são instâncias de classes 27 Exemplo de classes Classe Curso Propriedades Nome Localização Duração Créditos Comportamento Adicionar um aluno Remover um aluno Atribuir professor Atribuir sala 28 Objetos da classe Curso Curso •Adicionar um aluno •Remover um aluno •Atribuir professor •Atribuir sala •Nome = Análise I •Localização = MAC •Duração = 30h •Créditos = 2 •Nome = SI •Localização = MAC •Duração = 30h •Créditos = 2 •Nome •Localização •Duração •Créditos •Nome = Análise II •Localização = MAC •Duração = 15h •Créditos = 4 29 Classes de Objetos Quantas classes temos aqui? 30 Relação entre classe e objeto Classe é uma definição abstrata de um objeto Ela define a estrutura e o comportamento dos objetos Serve como template para criação de objetos Objetos são agrupados em classes 31 Classes e objetos em Java class Pessoa { ... } ... Pessoa p1 = new Pessoa(); Pessoa p2 = new Pessoa(); 32 Exercício Descrever as classes do sistema de Reserva de passagem 33 Atributo Propriedades de um objeto O estado do objeto é definido pelo conjunto de seus atributos Fisicamente armazenado em uma variável 34 Objetos da classe Curso Curso •Adicionar um aluno •Remover um aluno •Atribuir professor •Atribuir sala •Nome = Análise I •Localização = MAC •Duração = 30h •Créditos = 2 •Nome = SI •Localização = MAC •Duração = 30h •Créditos = 2 •Nome •Localização •Duração •Créditos •Nome = Análise II •Localização = MAC •Duração = 15h •Créditos = 4 35 Atributos em Java class Pessoa { int idade; String nome; } ... Pessoa p1 = new Pessoa(); Pessoa p2 = new Pessoa(); p1.nome = “Gibeon”; P2.nome = “Adilson”; 36 Referência para outros objetos Endereço Pessoa •Nome = Análise I •Idade = 23 •Endereco •Rua = Cruzeiro •Numero = 262 •Bairro = Setubal •Cidade = Recife 37 Atributo composto em Java class Pessoa { int idade; String nome; Endereco end; } class Endereco { String rua; String bairro; int numero; } ... Pessoa p1 = new Pessoa(); p1.nome = “Gibeon”; p1.endereco = new Endereco(); 38 Operação Modela comportamento das classes Serviços que os objetos oferecem a outros objetos (Troca de mensagens entre objetos) 39 Objetos da classe Curso Curso •Adicionar um aluno •Remover um aluno •Atribuir professor •Atribuir sala •Nome = Análise I •Localização = MAC •Duração = 30h •Créditos = 2 •Nome = SI •Localização = MAC •Duração = 30h •Créditos = 2 •Nome •Localização •Duração •Créditos •Nome = Análise II •Localização = MAC •Duração = 15h •Créditos = 4 40 Operações em Java class Pessoa { ... void aniversariar(){ idade = idade + 1; } } ... Pessoa p1 = new Pessoa(); Pessoa p2 = new Pessoa(); p1.nome = “Gibeon”; P1.aniversariar(); 41 Troca de mensagens B() C() A() A() D() E() 42 Troca de mensagens em Java class TipoA { TipoB b = new TipoB(); void m1(){ b.m2(); } } class TipoB { void m2(){ ... } } 43 Exercício Adicionar atributos e métodos às classes selecionadas 44 Polimorfismo Habilidade de esconder diferentes implementações através de uma única interface Manufactor A Manufactor A Manufactor C 45 Interface Interfaces formalizam polimorfismo Aumentam o nível de reusabilidade Viabilizam o uso de componentes Reduzem o esforço de evolução da aplicação 46 Interface Interfaces definem um tipo especificando apenas a assinatura de seus métodos Interfaces não possuem atributos e seus métodos não têm corpo Classes implementam interfaces provêem implementação para os métodos especificados em uma interface 47 Exemplo de Interface voltar() pausar() avancar() parar() carregarDisco() tocar() alterarHora() 48 Interface em Java interface DVD { void voltar(); void avancar(); void parar(); void tocar(); } class DVDSony implements DVD{ void voltar(){} void avancar(){} void parar(){} void tocar(){} } class DVDGradiente implements DVD{ void voltar(){} void avancar(){} void parar(){} void tocar(){} } 49 Generalização/Especialização É um relacionamento entre um elemento genérico e um mais específico Também chamada de Herança O objeto da classe filha “herda” todas as características da classe pai 50 Herança Class Animal{ ... } Animal Mamífero Homem Leão Class Mamifero extends Animal{ ... } Ave Class Ave extends Animal{ ... } Class Homem extends Mamifero{ ... } 51 Características da herança Uma subclasse herda os atributos, operações e relacionamentos de seu pai Uma subclasse pode: Adicionar atributo, operações e relacionamentos 52 Classe abstrata Classe abstrata é aquela que não possui instância Em geral, possui pelo menos um método abstrato Métodos abstratos não têm corpo subclasses não abstratas são obrigadas a fornecer uma implementação para eles 53 Exemplo de classe abstrata Poligono •Mover(x,y) •Area() •numeroLados() Pentagono Quadrilatero Triangulo 54 Classe abstrata em Java abstract class Poligono { void mover(int x,int y){...} double area(){...} int numeroLados(); } class Quadrilatero extends Poligono{ int numeroLados(){return 4;} } 55 Classes, Interfaces e Classes Abstratas Interfaces • Assinaturas dos métodos Classes • Atributos • Métodos Classes Abstratas • Atributos • Métodos • Assinatura de Métodos 56 Classes abstratas x Interfaces Herança de tipos x herança de código Classes descrevem propriedades fundamentais de um objeto Interfaces descrevem papéis desempenhados por um objeto em determinadas situações Interfaces são úteis para implementar herança múltipla 57 Exercício Identificar oportunidades de generalização ou especialização 58 Pacote Mecanismo para organizar elementos em grupos Facilita entendimento do sistema Favorece modularidade e reuso em larga escala Essencial para estruturar sistemas complexos nome do pacote 59 Coesão e Acoplamento Acoplamento é a medida de quão conectadas duas classes são cuidado com herança Coesão é a medida de quão auto-contida uma classe é Sistemas devem ter baixo acoplamento e alta coesão bom para manutenção 60 Visibilidade de acesso Existem quatro tipos básicos de modificadores de acesso Public Private Protected Friendly Dependendo do escopo (classe, método ou atributo), podem ter significados diferentes Mecanismo que facilita o encapsulamento 61 Visibilidade em classes Public – Qualquer outra classe pode acessá-la Private – Apenas classes presentes no mesmo arquivo podem acessá-la Friendly – Apenas classes no mesmo pacote podem acessá-la 62 Visibilidade de métodos e atributos Public – São visíveis para quaisquer classes invocar/acessar Private – São visíveis apenas na própria classe Protected – São visíveis apenas para subclasses ou classes do mesmo pacote Friendly – São visíveis apenas para classes do mesmo pacote 63 Um Sistema OO 64 Benefícios Único paradigma (Tudo é baseado em classes) Facilita o reuso de código e arquitetura Reflete o mundo real Estabilidade “Pequenas mudanças nos requisitos exigem poucas mudanças no código” 65 Suporte Métodos e técnicas Linguagens de modelagem: UML, OMT Linguagens de programação Ferramentas, Ambientes Padrões de projeto OO Etc. 66 FIM!!! 67