Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introdução à Orientação a Objetos Prof. David Zanetti Concepção de Sistemas • Início da computação – Computador utilizado apenas por grandes corporações • Década de 70 – Queda do preço dos equipamentos. • Cresce o volume e complexidade dos sistemas • Crescem os problemas de desenvolvimento de software – Falta de técnicas adequadas a realidade. Concepção de Sistemas • Sistemas simples são de fácil construção – 1 pessoa é capaz de compreender, conceber e manter o sistema. – Freelancer (profissional autônomo) – Dependente apenas da criatividade e habilidade deste indivíduo – Ciclo de vida geralmente curto e funcionalidades restritas. Concepção de Sistemas Concepção de Sistemas • Quanto maior o sistema que se deseja construir, mais complexo é o desenvolvimento e a manutenção – Desenvolvimento por múltiplas equipes – Turn over interno e externo – Sistema grande demais para ser entendido por 1 pessoa. • Conseqüências: problemas de comunicação, coordenação, planejamento, etc. Concepção de Sistemas • Desenvolvimento de sistemas complexos exige: – Métodos de trabalho bem definidos e entendidos por toda a equipe Demanda por processos, metodologias, ferramentas, etc. que auxiliem no desenvolvimento Concepção de Sistemas • Processo básico de desenvolvimento de SW: 1. Levantamento de requisitos 2. Análise 3. Projeto 4. Implementação (codificação) 5. Teste Paradigma “Conjunto de regras que estabelecem fronteiras e descrevem como resolver os problemas dentro destas fronteiras.” “Os paradigmas influenciam nossa percepção, ajudam-nos a organizar e a coordenar a maneira como olhamos para o mundo...” (Reengenharia - Reestruturando a Empresa, Daniel Morris e Joel Brandon) 8 Paradigma • O que seria um paradigma de programação? – Modelo, padrão ou estilo de programação suportado pelas linguagens de programação que agrupam certas características comuns. – Possibilita determinar como o programador realizará a estruturação e execução de um programa. 9 Paradigmas Mais Populares • Paradigma Estruturado; • Paradigma Imperativo (Procedural); • Paradigma Declarativo; • Paradigma Funcional; • Paradigma Orientado a Objetos; 10 Desenvolvimento Estruturado • Conceitos: – Abstração - Separar os aspectos relevantes para o problema e abstrair os demais. – Formalidade - Caminho rigoroso e metódico para solucionar o problema. – Dividir para conquistar - Dividir o problema em partes menores, independentes e mais simples de se solucionar. – Hierarquização - Sistema construído em níveis, onde cada nível acrescenta mais detalhes. Desenvolvimento Estruturado • Características: – Análise, projeto e programação baseados em funções (procedimentos) e nos dados que estas funções irão manipular (variáveis) – “Decomposição Funcional”: desenvolvedor decompõe sistema em partes menores (funções), criando um emaranhado de inúmeras funções que chamam umas às outras. – Geralmente não há separação de conceitos e responsabilidades, causando dependências enormes no sistema, dificultando futuras manutenções no código do programa. – Não existe reaproveitamento de código, ao contrário, muitas vezes se tem muito código duplicado. Desenvolvimento Estruturado • Trata análise, projeto e implementação como atividades diferentes e desconexas: – Diferentes métodos; – Diferentes notações e; – Diferentes objetivos. Orientação à Objetos • Paradigma que define a estrutura dos programas baseada nos conceitos do mundo real. • Permite criar programas componentizados, separando as partes do sistema por responsabilidades e fazendo com que essas partes se comuniquem entre sí, por meio de mensagens. Orientação à Objetos • Procura eliminar as diferenças entre as etapas de análise, projeto e implementação. • A idéia é fazer com que conceitos e notações de programação sejam alto-nível e sirvam apropriadamente como ferramentas de modelagem e construção de SW. OO X Estruturado • Orientado a Objetos• Tradicional (Estruturada) Classe Atributos Métodos Variáveis Funções OO X Estruturado • Programação tradicional (estruturada): – Sistema = Conjunto de programas que executam processos sobre dados. • OO: – O mundo é uma coletânea de objetos que interagem entre si e apresentam características próprias representadas pelos seus atributos e operações. O paradigma OO • Alan Kay, um dos pais do paradigma da orientação a objetos, formulou a chamada analogia biológica: “Como seria um sistema de software que funcionasse como um ser vivo? 1. Cada “célula” interagiria com outras células através do envio de mensagens para realizar um objetivo comum. 2. Adicionalmente, cada célula se comportaria como uma unidade autônoma. • De uma forma mais geral, Kay pensou em como construir um sistema de software a partir de agentes autônomos que interagem entre si. O paradigma OO • Um programa é uma coleção de objetos dizendo uns aos outros o que fazer. O paradigma OO • Procura-se imitar o mundo real através de um conjunto de objetos computacionais que interagem entre si. • Os objetos do mundo real são modelados e representados no mundo computacional, ou seja, dentro do sistema, por meio de objetos de software. • Muitos objetos (nem todos) computacionais são imagens de objetos do mundo real. • Dependendo do contexto (análise, projeto ou implementação) podemos estar falando de objetos do mundo real, de objetos computacionais ou nas duas coisas ao mesmo tempo. Consistência de linguagem e entendimento. OO - Vantagens • Diminuição do tempo e custo de desenvolvimento • Facilidade de comunicação entre os diversos setores do desenvolvimento • Atendimento da demanda gerada pela evolução tecnológica • Reutilização de código • Facilidade de manutenção (pequenas mudanças não acarretam grandes alterações no desenvolvimento OO - Vantagens • Consistência de linguagem – O mesmo modelo pode ser usado do início do projeto até a sua implementação. – Tanto o problema quanto a solução podem ser representados com os mesmos termos: classes, objetos, métodos, atributos e comportamentos – Trata de requisitos, projeto de alto nível, projeto de baixo nível, codificação e testes de forma uniforme. OO - Vantagens • Consistência de terminologia no decorrer do desenvolvimento – Formação de um glossário de termos • Permite dar mais importância a estrutura de um sistema do que às funções. – Funções mudam a todo momento, enquanto a estrutura permanece de certa forma constante. OO - Desvantagens • Para programadores acostumados com linguagens estruturadas há uma certa dificuldade no aprendizado. • Exige formas de pensar relativamente complexas. 24 OO - Histórico • 1967 – Simula – introduz os primeiros conceitos de OO • 1972 – Smalltak • 1980 – C++ • 1983 – Ada criada para uso militar nos EUA • 1984 – Eiffel • 1986 – Object Pascal • 1995 – Java • 1995 – Várias linguagens alegando ter conceitos de OO • Atual – C#, VB.Net, Python, Ruby, etc... Princípios de OO • Herança • Sobrecarga • Sobrescrita • Polimorfismo • Encapsulamento • Abstração • Classes • Objetos • Atributos • Métodos Verdades sobre OO • A OO não garante sistemas com interfaces amigáveis, ou seja, o paradigma não está necessariamente ligada a interface gráfica. • A OO não elimina a necessidade de implementar os sistemas e nem está relacionada apenas a fase de implementação. 27 Verdades sobre OO • A OO não garante a reutilização, ela oferece mecanismos para que isso ocorra, mas sempreserá função do desenvolvedor garantir isso. 28 Desenvolvimento Orientado a Objetos • Consiste em: – Análise Orientada a Objetos; – Projeto Orientado a Objetos; – Programação Orientada a Objetos. V 1.1 2011.2 29 Objetos • Objeto – Dicionário: Tudo que é perceptível por qualquer dos sentidos – Coisas do mundo real (ex.: animais, pessoas, objetos inanimados) que descobrimos estudando suas características (ex.:altura, tamanho, cor) e seu comportamento (ex.: falar, dormir, rolar, encher Objetos • Um objeto pode ser composto por vários outros objetos – Em outras palavras: você pode criar um novo tipo de objeto empacotando objetos existentes. – Dessa forma, você pode adicionar complexidade a um programa e escondê-la por trás da simplicidade de uso dos objetos. Objetos • Todo objeto tem um tipo. – Usando as palavras certas, cada objeto é uma instância de uma classe, onde classe é um sinônimo de tipo. – A questão mais importante relativa a uma classe é “que mensagens eu posso enviar para uma instância dessa classe?” Objetos • Todos os objetos de um dado tipo podem receber as mesmas mensagens. – Além disso, uma vez que, por exemplo, um objeto do tipo “círculo” é também um objeto do tipo “forma geométrica”, o objeto “círculo” aceita qualquer mensagem endereçada a uma “forma geométrica”. – Essa capacidade de “subtituição” de um objeto por outro é um dos mais poderosos conceitos em orientação a objetos. Objetos • Objetos podem ser tanto objetos concretos (carro, livro, nota fiscal), quanto abstratos (conta corrente, venda, pessoa jurídica). • Exemplos de objetos do mundo real: – David (Pessoa). – Aula de OO no dia 23/02/2011 (Aula). • Exemplos de objetos computacionais: – Registo que descreve o João (imagem de objeto do mundo real). – Árvore de pesquisa binária (objeto puramente computacional). Objetos • Objetos: – Possuem um estado, definido por valores de atributos e por relações que num dado momento tem com outros objetos. – Possuem uma identidade que os distingue de outros objetos, mesmo que possuam valores semelhantes de atributos. Objetos Objetos • Objetos: – Seu estado será armazenado em variáveis (atributos) enquanto seu comportamento será representado através de seus métodos. Objetos • Objetos se comunicam entre si: – Recebem requisições (de outros objetos) através de mensagens. – Possuem a responsabilidade de executar um método (comportamento) que cumpra a requisição. Vantagens • Modularidade: O código fonte para um objeto pode ser escrito e mantido independentemente do código- fonte para outros objetos. • Ocultação de informações: Ao interagir apenas com os métodos de um objeto, os detalhes de sua implementação interna permanecem escondidos do mundo exterior. 39 Vantagens • Reutilização de código: Se um objeto já existe (talvez escrito por outro desenvolvedor de software), você pode usar esse objeto em seu programa. Isso permite que especialistas implementem, testem e depurem objetos complexos, para serem utilizados posteriormente. • Plug’n play e facilidade de depuração: Se um objeto em particular se revelar problemático, pode-se removê-lo da aplicação e conectar um objeto diferente para substitui-lo. O que é análogo a resolver problemas mecânicos no mundo real: se um parafuso quebra, você o substitui e não a máquina inteira. 40 Abstração ? Uma abstração é qualquer modelo que inclui os aspectos relevantes de alguma coisa, ao mesmo tempo em que ignora os menos importantes. Abstração ? Após observar e estudar os objetos do mundo real, separamos mentalmente aqueles que nos interessam. ? Abstração: Separação mental dos objetos que nos interessam em um determinado problema. Abstração • Quando observamos a realidade, separando mentalmente os objetos que nos interessam para estudo estamos praticando abstração. • Analista de sistemas: – Estudar a realidade e usar a abstração para representar objetos em um modelo de classes dentro de um determinado contexto denominado Domínio de Aplicação Abstração • Tenta-se retirar elementos e requisitos que irão ajudar na resolução de um problema, ignorando os demais. • Processo de retirar do domínio do problema os detalhes relevantes e representá-los não mais em uma linguagem do domínio e sim na linguagem da solução. Abstração - Exemplos Pessoa ? nome ? altura ? peso ? cor dos olhos ? cor do cabelo ? identidade ? cpf ? idade ? filiação ? naturalidade Sistema para modelos ? nome ? altura ? peso ? cor dos olhos ? cor do cabelo ? idade Sistema para banco ? nome ? identidade ? cpf ? idade ? filiação ? naturalidade Abstração - Exemplos • Beija-Flor Identidade: ‘o beija-flor que vem ao meu jardim’ Características: penas azuis bico fino vôo rápido Comportamento: voar piar Abstração - Exemplo ?Pessoa Identidade: ‘Mário’ Características: olhos pretos nasceu em 16/02/70 pesa 70kg mede 1,70m Comportamento: andar falar comer rir Abstração - Exemplo • Telefone Identidade:: número 2576-0989 Características: azul 2.4 GHz tone Comportamento: tocar discar Abstração - Exemplo • Ônibus Identidade: placa LXY 7684 Características: cor amarela 30 assentos a diesel Comportamento: frear andar correr buzinar acelerar Objeto • Representação Identidade Características (estado) Mário Comportamento Serviços, Interface ou protocolo Exercício 1 – Identificação de Objetos • Realize o exercício 1 cujo objetivo é identificar objetos de nosso cotidiano, bem como suas características e seus comportamentos e relações. Classes • OO = Conjuntos de objetos agrupados em classes de objetos similares que interagem através da troca de mensagens. • Usando abstração podemos agrupar alguns objetos, observando suas características e comportamentos em comum. Classes • Classes: – É possível ter vários objetos do mesmo tipo, que compartilham características em comum. – Uma classe é um modelo (protótipo) que define as variáveis (estado) e os métodos (comportamento) comuns a todos os objetos do mesmo tipo. • Especifica que informações o objeto pode armazenar • Especifica o conjunto de requisições que um objeto pode cumprir. • Especifica que método será executado para cumprir uma requisição. – Um objeto é uma instância de uma classe. Classes • Classe: Modelo estático que permite especificar um conjunto de características do conceito que representa. • Objeto: Entidade dinâmica criada a partir de uma classe e possui os dados sobre os quais são realizadas as operações disponíveis em sua classe. Classes Objetos (instâncias) Classe instanciação João Maria Pessoa Classes • Classes podem representar: – Coisas concretas: Pessoa, Turma, Carro, Imóvel, Livro. – Papéis que coisas concretas assumem: Aluno, Professor, Piloto – Eventos: Curso, Aula, Acidente. – Especificações de coisas concretas: Ficha de Produto, Curso (Plano de Estudos). – Tipos de dados: Data, Intervalo de Tempo, Número Complexo, Vetor. Classes • Representação: – Nome no singular – Deve refletir claramente o papel que ela desempenha. • Características: – Duas classes não podem ter a mesma finalidade semântica. – Boa caracterização do que está sendo representado. – Nomes devem estar adequados ao vocabulário do Domínio da Aplicação. Membros de Classes • Componentes internas de um objeto, definidas por uma classe. – Atributos – Métodos Atributos ? Descrevem as características das instâncias de uma classe? Seus valores definem o estado do objeto ? O estado de um objeto pode mudar ao longo de sua existência ? A identidade de um objeto, contudo, nunca muda Funcionário_Helena Nome=Helena Reis Nasc=28/01/1965 Salário = 4.000 InformarSalário CalcularIdade Funcionário_Mário Nome=Mário Sá Nasc=16/02/1970 Salário = 3.000 InformarSalário CalcularIdade Atributos • Todos os objetos de uma classe são caracterizados pelos mesmos atributos – O mesmo atributo pode ter valores diferentes de objeto para objeto • Atributos são definidos ao nível da classe, enquanto que os valores dos atributos são definidos ao nível dos objetos – Ex: Uma pessoa (classe) tem os atributos nome, data de nascimento e peso. João é uma pessoa com nome “João Silva”, data de nascimento “18/3/1973” e peso “68 Kg”. Serviços/Operações/Métodos ? Representam o comportamento das instâncias de uma classe ? Correspondem ao protocolo ou ações das instâncias de uma classe Funcionário_Helena Nome=Helena Reis Nasc=28/01/1965 Salário = 4.000 InformarSalário CalcularIdade Funcionário_Mário Nome=Mário Sá Nasc=16/02/1970 Salário = 3.000 InformarSalário CalcularIdade 4000 3000 Informar Salário? Serviços/Operações/Métodos • Membros do tipo função definidos por cada classe e executados no escopo de um objeto. • Atuam sobre os atributos mantidos pelo objeto. • Um comportamento semelhante entre diferentes objetos – Classe Veículo: Andar, ligar, frear Serviços/Operações/Métodos • Objetos da mesma classe têm as mesmas operações • Operações são definidas ao nível da classe, enquanto que a invocação de uma operação ocorre ao nível do objeto. • Nas classes que representam objetos do mundo real, indicam- se por vezes responsabilidades em vez de operações. Classes ContaEmBanco Depositar Sacar ConsultarSaldo Encerrar Abrir Nome Saldo Profissão Atributos Métodos (Parte escondida) (Protocolo de acesso) Objetos do tipo ContaEmBanco Duas instâncias (objetos) da classe ContaEmBanco Depositar Sacar ConsultarSaldo Encerrar Abrir Tio Patinhas 100.000,00 Empresário Depositar Sacar ConsultarSaldo Encerrar Abrir Donald 1,00 Jornalista Conta do Tio Patinhas Conta do Donald Classes - Exemplo classe Identidade: ‘Telefone da minha casa’ Características: marca: Siemens número: 2576-0989 discagem: pulso instância da classe (objeto) Comportamento: tocar discar Classes - Exemplo classe Identidade: ‘Meu celular’ Características: marca: Nokia número: 99193467 discagem: tom instância da classe (objeto) Comportamento: tocar discar Implementação em Java Classes - Exemplo Classe Instâncias (objetos) Implementação em Java Implementação em Java Modelagem de Classes • Classes: – Representação: • Nome no singular • Caixa com 3 divisões (nome, atributos e operações) • Deve refletir claramente o papel que ela desempenha Tarefa d ata In ic ial : Dat a = d efa ul t d ata Fi nal : Data d esc rica o a tr ib ui rDataI ni ci al (d : Da ta) a tr ib ui rDataF ina l(d : Dat a) o bte rDu racao() : Da ta Modelagem de Classes • Atributos: – Propriedade do item que está sendo modelado • Tipo – Primitivos (int, byte, char, string, bool) – Composto (array, enum,...) • Pode conter um valor padrão • Visibilidade – Publica – Privada – Substantivo que represente claramente a informação que o atributo guarda. Tarefa d ata In ic ial : Dat a = d efa ul t d ata Fi nal : Data d esc rica o a tr ib ui rDataI ni ci al (d : Da ta) a tr ib ui rDataF ina l(d : Dat a) o bte rDu racao() : Da ta Modelagem de Classes • Métodos: – Serviços que uma classe pode realizar • mensagens que se pode enviar a uma classe – nome: texto – parâmetros: argumentos (sintaxe de atributos) – retorno: dependente da linguagem – Sintaxe: <<visibilidade>> nome (<<parâmetros>>) : <<retorno>> Ex: + finalizarTarefa (d: Data) : Boolean Tarefa d ata In ic ial : Dat a = d efa ul t d ata Fi nal : Data d esc rica o a tr ib ui rDataI ni ci al (d : Da ta) a tr ib ui rDataF ina l(d : Dat a) o bte rDu racao() : Da ta Codificação de Classes Arquivo 1 – Tarefa.cs public class Tarefa { private datetime dataInicial = default; private datetime dataFinal = ; private string descrição = “”; public void atribuirDataInicial(datetime d){ ... } public void atribuirDataFinal(datetime d){ ... } public void obterduração (int cpf){ ... } } Tarefa d ata In ic ial : Dat a = d efa ul t d ata Fi nal : Data d esc rica o a tr ib ui rDataI ni ci al (d : Da ta) a tr ib ui rDataF ina l(d : Dat a) o bte rDu racao() : Da ta Modelagem Codificação de Classes Arquivo 1 – Cliente.cs public class Cliente { private int CPF = 99999999999; private char Nome = “Fulano da Silva”; private char Telefone = “(21)5555-4433”; private ContaPoupanca = null; public int mostrarCPF(){ return cpf; } public void verSaldo(int diaDeposito){ ContaPoupanca cp = obterContaPoupanca(CPF) return cp.Saldo(diaDeposito) } public ContaPoupanca obterContaPoupanca(int cpf){ ... } } Codificação de Classes Arquivo 2 – ContaPoupanca.cs public class ContaPoupanca extends Conta { private int DiaDeposito; public float verLucro(){ ... } } Codificação de Classes Arquivo 3 – Conta.cs public class Conta { private int agencia; private chart contacorrente; public void Depositar(float valor){ return cpf; } public int saldo(int dia){ ... } } Codificação de Classes Arquivo 4 – Main.cs public static void main(String args[]) { Cliente c1 = new Cliente(); System.out.println(c1.mostrarCPF()); System.out.println(c1.verSaldo(23)); } Identificando Classes • Dado um determinado cenário do domínio: 1. Analisar o texto. 2. Identificar substantivos a partir das especificações. 3. Remover sinônimos. 4. Acrescente associações entre os conceitos. Exercício 1 – Identificação de Classes • Considere o seguinte exemplo: – Um zoológico é composto de um conjunto de jaulas. – Cada jaula é a casa de pelo menos 2 animais. – Animais podem ser répteis, insetos ou mamíferos. – Mamíferos são elefantes, macacos e tigres. – Macacos comem bananas. – Tigres preferem carne. • Como você modelaria o modelo de classes para este domínio? – Defina quais são as classes – Adicione qualquer classe adicional que seja necessária – Dê uma definição para cada uma das classes – Sugira possíveis atributos e métodos para as classes identificadas Exercício 2 – Modelagem de Classes • Modele as seguintes classes: – Desenvolva um modelo de classe que represente o conceito “ContaEmBanco”. As instâncias desta classe devem ser capazes de armazenar o nome do cliente, seu endereço e telefone, o número da conta (composto por número principal e um digito verificador) e o número da agência. Existem outras duas classes “ContaCorrente” e ContaPoupanca” que são do tipo “ContaEmBanco”. – Projete uma classe de nome “Organizacao”, cujas instâncias sejam capazes de guardar os dados de uma dada empresa. Os dados a serem armazenados são razão social, nome fantasia, endereço (composto por logradouro, número, complemento, bairro, cidade e estado), CNPJ, telefone e numero de funcionários. Sugira possíveis tipos de dados para cada atributo. – Desenvolva uma classe de nome “CodigoPostal”, cujas instâncias sejam capazes de guardar o Código Postal de uma dada rua. Note que cada Código Postal é constituído por dois números inteiros, que designaremos respectivamente por "indicativo" e "extensão", e o nome da rua (Ex: 38408 046 Armando Lombardi).Mensagens • O comportamento determina como um objeto pode responder a interações mediante à ativação de operações decorrentes de mensagens recebidas de outros objetos • O Comportamento é determinado pelo conjunto de operações que o objeto pode realizar. Mensagens • Sistema de Controle Acadêmico – Classe: Aluno – Objeto: Maurício (instância de Aluno) – Método: Solicita Matrícula – Mauricio -> Solicita Matrícula = 105018 (retorno) Mensagens ? A interação entre os objetos é feita através da troca de mensagens. ? Uma mensagem é uma solicitação feita por um objeto A a um objeto B, para que este mude seu estado ou retorne algum valor. ? Como resultado desta solicitação, o objeto B irá modificar seu estado ou retornar algum valor para o objeto que solicitou a mensagem. Mensagens ? O conceito de mensagem está diretamente associado ao conceito de operação (método). ? Em um programa orientado a objeto, nenhuma outra parte do programa pode acessar diretamente os dados (valores dos atributos) de um objeto instanciado de uma classe. ? Toda a comunicação entre os objetos ocorre única e exclusivamente através de mensagens que invocam métodos desses objetos Mensagens • Cada mensagem é dirigida a um objeto e provoca a execução de um método sobre os dados particulares do objeto (invocação parametrizada) • O mesmo método pode ser executado sobre os dados de diferentes objetos instanciados a partir da mesma classe Mensagens Interface: conjunto de serviços oferecidos por um objeto Mensagem: ativação de um método em um objeto A interação entre objetos, ou seja, a evolução do programa, se dá através de mensagens trocadas através da interface (ou protocolo) especificado para o objeto pela sua classe. Análogo a uma chamada de função Mensagens Interface: conjunto de serviços oferecidos por um objeto Mensagem: ativação de um método em um objeto Todos os objetos de uma mesma classe possuem a mesma interface e aplicam o mesmo método em resposta a uma mensagem idêntica. O valor retornado pode, no entanto, variar em função dos valores dos atributos mantidos por cada objeto. Análogo a uma chamada de função Modelagem de Classes • Classes: – Descrevem objetos com: • Propriedades similares (atributos) • Comportamento comum (operações) • Relações comuns com outros objetos (associações e agregações) • Semântica comum – Trata-se de uma abstração que: • Enfatiza características relevantes de um determinado objeto • Suprime outras características que não são de interesse – Representação: • Nome no singular • Caixa com 3 divisões (nome, atributos e operações) • Deve refletir claramente o papel que ela desempenha – Objeto: instância de uma classe Tarefa d ata In ic ial : Dat a = d efa ul t d ata Fi nal : Data d esc rica o a tr ib ui rDataI ni ci al (d : Da ta) a tr ib ui rDataF ina l(d : Dat a) o bte rDu racao() : Da ta Modelagem de Classes • Atributos: – Propriedade do item que está sendo modelado • Tipo – Primitivos (int, byte, char, string, bool) – Composto (array, enum,...) • Pode conter um valor padrão • Visibilidade – Publica – Privada – Substantivo que represente claramente a informação que o atributo guarda – A melhor fonte de identificação e coleta de atributos de classes é a descrição das funcionalidades do sistema (Casos de Uso) Tarefa d ata In ic ial : Dat a = d efa ul t d ata Fi nal : Data d esc rica o a tr ib ui rDataI ni ci al (d : Da ta) a tr ib ui rDataF ina l(d : Dat a) o bte rDu racao() : Da ta Modelagem de Classes • Atributos: – Serviços que uma classe pode realizar • Corresponde às mensagens que se pode enviar a uma classe • Normalmente omitem-se as operações que manipulam os atributos (obter/atribuir) – nome: texto – parâmetros: argumentos (sintaxe de atributos) – retorno: dependente da linguagem – Sintaxe: <<visibilidade>> nome (<<parâmetros>>) : <<retorno>> Ex: + finalizarTarefa (d: Data) : Boolean – Visibilidade: pública (+), protegida (#), privada (-) • Interpretação é dependente da linguagem • Não é necessária no nível conceitual Tarefa d ata In ic ial : Dat a = d efa ul t d ata Fi nal : Data d esc rica o a tr ib ui rDataI ni ci al (d : Da ta) a tr ib ui rDataF ina l(d : Dat a) o bte rDu racao() : Da ta Codificação de Classes Arquivo 1 – Tarefa.cs public class Tarefa { private datetime dataInicial = default; private datetime dataFinal = ; private string descrição = “”; public void atribuirDataInicial(datetime d){ ... } public void atribuirDataFinal(datetime d){ ... } public void obterduração (int cpf){ ... } } Tarefa d ata In ic ial : Dat a = d efa ul t d ata Fi nal : Data d esc rica o a tr ib ui rDataI ni ci al (d : Da ta) a tr ib ui rDataF ina l(d : Dat a) o bte rDu racao() : Da ta Exercício • Modele a classe “ContaEmBanco” – Desenvolva um modelo de classes que represente o conceito “ContaEmBanco”. As instâncias desta classe devem ser capazes de armazenar o nome do cliente, seu endereço e telefone, o número da conta (composto por número principal e um digito verificador) e o número da agência. Existem outras duas classes “ContaCorrente” e ContaPoupanca” que são do tipo “ContaEmBanco”. • Modele a classe “Organização” – Projete uma classe de nome “Organizacao”, cujas instâncias sejam capazes de guardar os dados de uma dada empresa. Os dados a serem armazenados são razão social, nome fantasia, endereço (composto por logradouro, número, complemento, bairro, cidade e estado), CNPJ, telefone e numero de funcionários. Sugira possíveis tipos de dados para cada atributo. Exercício • Modele a classe “CodigoPostal” – Desenvolva uma classe de nome “CodigoPostal”, cujas instâncias sejam capazes de guardar o Código Postal de uma dada rua. Note que cada Código Postal é constituído por dois números inteiros, que designaremos respectivamente por "indicativo" e "extensão", e o nome da rua (Ex: 38408 046 Armando Lombardi). Modelagem de Classes • Classes: – Descrevem objetos com: • Propriedades similares (atributos) • Comportamento comum (operações) • Relações comuns com outros objetos (associações e agregações) • Semântica comum – Trata-se de uma abstração que: • Enfatiza características relevantes de um determinado objeto • Suprime outras características que não são de interesse – Representação: • Nome no singular • Caixa com 3 divisões (nome, atributos e operações) • Deve refletir claramente o papel que ela desempenha – Objeto: instância de uma classe Tarefa d ata In ic ial : Dat a = d efa ul t d ata Fi nal : Data d esc rica o a tr ib ui rDataI ni ci al (d : Da ta) a tr ib ui rDataF ina l(d : Dat a) o bte rDu racao() : Da ta Modelagem de Classes • Atributos: – Propriedade do item que está sendo modelado • Tipo – Primitivos (int, byte, char, string, bool) – Composto (array, enum,...) • Pode conter um valor padrão • Visibilidade – Publica – Privada – Substantivo que represente claramente a informação que o atributo guarda – A melhor fonte de identificação e coleta de atributos de classes é a descrição das funcionalidades do sistema (Casos de Uso) Tarefa d ata In ic ial : Dat a = d efa ul t d ata Fi nal : Data d esc rica o a tr ib ui rDataI ni ci al (d : Da ta) a tr ib ui rDataF ina l(d : Dat a) o bte rDu racao() : Da ta Modelagem de Classes • Métodos: – Serviços que uma classe pode realizar • Corresponde às mensagens que se pode enviar a uma classe • Normalmente omitem-se as operações que manipulam os atributos (obter/atribuir) – nome: texto – parâmetros: argumentos (sintaxe de atributos) – retorno: dependente da linguagem – Sintaxe: <<visibilidade>> nome (<<parâmetros>>): <<retorno>> Ex: + finalizarTarefa (d: Data) : Boolean – Visibilidade: pública (+), protegida (#), privada (-) • Interpretação é dependente da linguagem • Não é necessária no nível conceitual Tarefa d ata In ic ial : Dat a = d efa ul t d ata Fi nal : Data d esc rica o a tr ib ui rDataI ni ci al (d : Da ta) a tr ib ui rDataF ina l(d : Dat a) o bte rDu racao() : Da ta Codificação de Classes Arquivo 1 – Tarefa.cs public class Tarefa { private datetime dataInicial = default; private datetime dataFinal = ; private string descrição = “”; public void atribuirDataInicial(datetime d){ ... } public void atribuirDataFinal(datetime d){ ... } public void obterduração (int cpf){ ... } } Tarefa d ata In ic ial : Dat a = d efa ul t d ata Fi nal : Data d esc rica o a tr ib ui rDataI ni ci al (d : Da ta) a tr ib ui rDataF ina l(d : Dat a) o bte rDu racao() : Da ta Modelagem Modelagem Arquivo 1 – Cliente.cs public class Cliente { private int CPF = 99999999999; private char Nome = “Fulano da Silva”; private char Telefone = “(21)5555-4433”; private ContaPoupanca = null; public int mostrarCPF(){ return cpf; } public void verSaldo(int diaDeposito){ ContaPoupanca cp = obterContaPoupanca(CPF) return cp.Saldo(diaDeposito) } public ContaPoupanca obterContaPoupanca(int cpf){ ... } } Modelagem Arquivo 2 – ContaPoupanca.cs public class ContaPoupanca extends Conta { private int DiaDeposito; public float verLucro(){ ... } } Modelagem Arquivo 3 – Conta.cs public class Conta { private int agencia; private chart contacorrente; public void Depositar(float valor){ return cpf; } public int saldo(int dia){ ... } } Modelagem Arquivo 4 – Main.cs public static void main(String args[]) { Cliente c1 = new Cliente(); System.out.println(c1.mostrarCPF()); System.out.println(c1.verSaldo(23)); } Modelagem Modelagem Associações ? Representam um relacionamento entre os objetos de duas ou mais classes. ? É representada, nos diagramas de classes, por uma linha conectando as classes associadas. P e d i d o d a t a R e c e b i m e n to s i t u a c a o i d e n t i f i c a d o r : S t r i n g p r e c o r e a l i z a r E n t r e g a ( ) C l i e n te n o m e e n d e r e c o p o s s u i C re d i t o () 10 . . * 10 . . * r e a l iz a d a p o r Associações ? Seta é usada para apontar a leitura da associação. ? Para esclarecer o significado de uma associação, ela é nomeada ? O nome é apresentado ao longo da linha de associação ? Usualmente, esse nome é um verbo ou uma frase verbalizada ? Entre duas Classes pode existir mais de uma associação com nomes diferentes. Associações ? Uma classe pode estar associada a ela mesma (associação reflexiva ou auto-relacionamento). pai mãe 0..1 * Pessoa filho 0..1 * filho Visibilidade ? Pode ser utilizado para caracterizar uma classe, um atributo, uma operação e até mesmo uma associação ? Tipos de visibilidade: ? Privada (private) “-” ? Acessível somente para a própria classe ? Protegida (protected) “#” ? Acessível somente pela classe e suas subclasses ? Pública (public) “+” ? Acessível por outras classes ? De Pacote (package) “~” ? Acessível somente pelas classes do pacote que a contém Multiplicidade ? Indica como os objetos participam da relação ? Número de instâncias de uma classe relacionada com uma instância de outra classe. ? Para cada associação, há uma multiplicidade em cada direção. P edido da taR e ce b im en to s itu a ca o id e n tifica d o r : S trin g p re co re a liza rEn tre g a () Cl iente n om e ende re co p o s s ui C re d i to () 10..* 10. .* Multiplicidade ? * = 0..infinito (“muitos”) ? 1..* = 1..infinito (“uma ou mais”) ? 1 = exatamente um ? 0..1 = zero ou um ? 1..100 = inteiro entre 1 e 100 ? 2,4,5 = dois, quatro, cinco Herança • Em um modelo OO, as classes podem ser organizadas hierarquicamente de acordo com suas semelhanças ou diferenças. • Inicia-se a construção de uma hierarquia com a definição de uma classe mais abstrata e seu refinamento em subclasses mais especializadas – Ex: Classe veículo é refinada nas subclasses carro, ônibus e caminhão • Classes especializadas (subclasses/classes filhas) herdam a estrutura E o comportamento das classes genéricas Herança Herança • Este recurso não está disponível em sistemas procedurais, caracterizando-se em uma das principais diferenças entre a Análise Orientada a Objetos e a Análise Estruturada. • A classe mais geral é denominada superclasse e a classe mais especializada é chamada subclasse. • Há duas formas de se descobrir heranças: – Generalização – Especialização Herança • Classes Genéricas podem ser especializadas em subclasses • Subclasses herdam as características de uma ou mais superclasses – Atributos – Operações – Comportamento Retangulo extrem idades : Point Poligono pon tos : Lis ta Quadrado Circulo raio : Float Forma origem mover() exibir() Herança class System Onibus - passageiros + acionar campainha() Veículo - ano - cor - marca - modelo + l igar() + acelerar() Carro - combustivel Caminhao - eixos - tara - trucado + levantar carroceria() Herança Cliente crédito Calcular Crédito Pessoa idade CPF Alterar Dados Funcionário salário Imprimir Salário Cliente idade CPF Crédito Alterar Dados Calcular Crédito Funcionário idade CPF Salário Alterar Dados Imprimir Salário Herança public class Pessoa { private int idade; private int cpf; public void alterarDados(Int32 _idade, Int32 _cpf){ ... } } public class Funcionario extends Pessoa { private int salario; public int imprimirSalario(){ return salario; } } public class Cliente extends Pessoa { private int credito; public int calcularCredito(){ return credito; } } Herança public class Exemplo { public static void main(String args[]) { Funcionario f = new Funcionario(); System.out.println( f.imprimirSalario() ); f.alterarDados(32, 09873452121); Funcionario f2 = new Professor(); System.out.println( f2.imprimirSalario() ); Pessoa p = new Pessoa(); System.out.println( p.imprimirSalario() ); f.alterarDados(32, 09873452121); Cliente c = new Cliente(); System.out.println( c.calcularCredito() ); System.out.println( c.imprimirSalario() ); c.alterarDados(32, 09873452121); Professor p = new Funcionario(); } } Herança • A subclasse pode acrescentar novas estruturas de dados (atributos) e comportamentos (métodos) aos herdados da superclasse (especialização). • A subclasse pode alterar o comportamento originalmente herdado da superclasse (polimorfismo). • Deve ser lida como “é um tipo de”. Herança • Herança simples: subclasse herda estruturas de dados e comportamentos de uma única superclasse. • Herança múltipla: subclasse herda estruturas de dados e comportamentos de mais de uma superclasse. Veiculo Veiculo Terreste Veiculo Aquático Carro Veiculo Anfibio Barco Herança • Herança Múltipla • Vantagens: – Semelhança com o pensamento humano – Maior flexibilidade para especificar as classes – Maior freqüência de reuso • Desvantagens: – Perda de claridade (que método é executado?) – Implementação mais complicada – Resolução de conflito é necessária as características herdadas de múltiplas vezes Herança - Exercício • Completar o exercício do zoológico: • Considere o seguinte exemplo: – Um zoológico é composto de um conjunto de jaulas. – Cada jaula é a casa de pelo menos 2 animais. – Animais podem ser répteis, insetos ou mamíferos.– Mamíferos são elefantes, macacos e tigres. – Macacos comem bananas. – Tigres preferem carne. • Identificar classes, atributos, operações, herança simples, herança múltipla, etc... Herança - Exercício • Considere os seguintes requisitos para um sistema de informação para a gestão de um parque de estacionamento: – O controle é efetuado com base na placa do veículo. – Na entrada do parque, existirá um funcionário que introduz as placas no sistema, ficando de imediato registrado a data e hora de início do estacionamento. O sistema tem que verificar se a placa em questão já existe. – Se a placa não for reconhecida pelo sistema, então o funcionário deverá criar um novo veículo no sistema. – Na saída, um funcionário introduz novamente a placa e o sistema calcula o custo do estacionamento. – O gestor do parque precisa consultar, diariamente, uma listagem dos estacionamentos. Apenas o gestor poderá bt li t Herança - Exercício • Em entrevista complementar foram obtidas as seguintes informações adicionais: – Sobre cada veículo apenas interessa guardar no sistema a placa, tipo e cor. – Um veículo pode efetuar vários estacionamentos no mesmo dia. – Os veículos podem ser automóveis ou motocicletas motorizadas. – Inicialmente existe uma tarifa base que é aplicada a todos os veículos. Contudo, para veículos com um elevado número de estacionamentos é possível criar tarifas específicas. Cada tarifa possui um custo por hora. – O estacionamento possui um número de vagas limitado. As vagas são caracterizadas por um número, piso e um Agregação • Forma especial de associação – Um todo é relacionado com suas partes – Relacionamento “todo-parte”. • Deve ser lida como “é parte de” • Componentes são partes dos objetos agregados – Carro tem motor e rodas • Exemplo típico: – Estrutura organizacional de uma empresa Empresa Departamento 1..* 11 1..* Agregação • Também é conhecida como relação de conteúdo ou posse lógica, pois a classe agregada (parte) é vista como um “atributo” da classe agregadora (todo). • É representada como uma linha de associação com um diamante vazado junto à classe agregadora. • Podem existir agregações reflexivas, ou seja, agregações de uma classe com ela mesma. • A multiplicidade é representada da mesma maneira que nas associações. Composição • Tipo mais forte de relacionamento “todo-parte”. • Partes pertencem apenas a um “todo” • Partes só fazem sentido junto com o “todo” • Partes tem o mesmo ciclo de vida do “todo” – Ex: Deleção em cascata Composição • É representada como uma linha de associação com um diamante preenchido junto à classe “todo”. • A multiplicidade é representada da mesma maneira que nas associações. Ponto Pol ígono 1 1 Representacao Grafica cor textura 1 11 11 1 Agregação X Composição • Distinção entre associação e agregação geralmente é semântica. • Uma agregação é uma soma de todas as partes. • Uma composição é apropriada quando cada parte é possuída por um único objeto e a parte não possui uma vida independente do seu dono. Classe de Associação • Utilizamos Classes de Associação quando desejamos acrescentar atributos ou métodos a uma associação • São úteis se os atributos não pertencem a uma classe mas a associação entre classes – Pode haver apenas uma instância da classe de associação entre os objetos Alocacao inic io final Pessoa Cargo 10..*0..* 10..*0..* Classe de Associação • Pode-se “promover” uma classe de associação em uma classe normal. Classe de Associação • Exercício: Considere o diagrama de classes a seguir, que exibe uma classe associativa entre as classes Pessoa e Empresa. Crie um diagrama de classes equivalente ao fornecido abaixo, mas sem utilizar uma classe associativa. Classe de Associação • Solução: Encapsulamento • Técnica de separar aspectos externos dos interno da implementação de um objeto. – Ex: Aceleração • Uma classe encapsula o comportamento e atributos de um objeto, escondendo os detalhes de implementação • Isolamento dos dados: qualquer aplicação pode usar o serviço fornecido pela classe através de suas interfaces Encapsulamento • Um módulo está encapsulado se os clientes são restritos, pela linguagem, a fazer acesso ao módulo somente através de sua interface externa; • Visibilidades Public e Private definem as interfaces externas e internas, respectivamente; • Heranças ? Protected (acesso a classes derivadas); Encapsulamento • Em um único pacote estão dados (estrutura) e operações (comportamento) • Dados de um objeto são privados do objeto • Dados do objeto só são manipulados pelos métodos do próprio objeto. • Métodos de um objeto podem ser públicos • Os métodos são a interface do objeto Encapsulamento Maria Engenheira 30 anos R$ 1000,00 Atualizar Salário Alterar Idade AlterarCargo Imprimir Dados 31 anos Aniversário Encapsulamento public class Automovel { private String placa; public alterarPlaca(Int32 _valor) { placa = _valor; } } public class Teste { Automovel a = new Automovel(); a.placa = “3333”; a.alterarPlaca(LDR3435); } public class Pessoa { private String nome; public void atribuirNome(String _nome) { nome = _nome; } public String obterNome() { return nome; } } public class Teste { public static void main(String args[]) { Pessoa a = new Pessoa(); a.atribuirNome(“João”); Pessoa b = new Pessoa(); b.atribuirNome(“Pedro”); Pessoa c; c.atribuirNome(“Maria”); //Erro de execução. } } Modelagem de Pessoa Instanciação, Criação de Objetos Polimorfismo • É a capacidade de assumir diferentes formas • Um mesmo comportamento é apresentado de forma diferente em diferentes classes ou subclasses • A herança permite por em prática o polimorfismo desde que partes da superclasse não sejam eliminadas • A subclasse pode redefinir um método herdado de uma superclasse. • Métodos polimórficos possuem implementações direfentes. Polimorfismo c la s s M o d e lo d e C la s s e s C a r r o + a b ri r v i d ro () V e ic u lo + a b ri r v i d ro () K a + a b ri r v i d ro () P a l io 1 .0 P é d e B o i + a b ri r v i d ro () N e w C iv ic + a b ri r v i d ro () Polimorfismo Funcionário Matrícula Salário Calcular Salário Gerente nível Vendedor Comissão Calcular Salário Salário = (no. de dias * Valor base) Salário = (no. de dias * Valor base) + comissão Sobrecarga Atribui a um único operador a capacidade de agir de diferentes formas em função dos parâmetros recebidos Exemplo: Na classe ContaEmBanco, o método Depositar possui duas implementações diferentes: 1 - uma para depósitos em dinheiro 2 - outra para depósitos em cheque O serviço escolhido depende do parâmetro enviado junto à ativação do serviço (cheque ou dinheiro) Sobrecarga public class Professor extends Pessoa { private int numeroHorasAula; public void atribuirNumeroHorasAula(String _n) { numeroHorasAula = _n; } public float obterSalario(){ return numeroHorasAula*10; } public float obterSalario(float _bonus) { return obterSalario() + _bonus;} } public class Teste { public static void main(String args[]) { Professor p = new Professor(); p.atribuirNumeroHorasAula(10); System.out.println(p.obterSalario()); System.out.println(p.obterSalario(500)); } } 2 Métodos com o mesmo nome Sobrecarga Mesmo nome mas lista de parâmetros diferente. Sobrescrita Capacidade de um objeto responder com diferentes comportamentos uma mesma solicitação Exemplo: Suponha um método que receba um objeto ContaEmBancoe que neste método seja solicitado a ativação do método Sacar. O comportamento do objeto vai ser diferente em função do objeto real: 1 - ContaEspecial permite que o saldo fique negativo 2 - ContaComum não O comportamento do objeto será relativo ao objeto real a qual é feita a referência public class Funcionario { public float obterSalario() { return 100 }; } public class Professor extends Funcionario { public float obterSalario(){ return 200; } } public class Teste { public static void main(String args[]) { Funcionario f = new Professor(); System.out.println(f.obterSalario()); Funcionario f = new Funcionario(); System.out.println(f.obterSalario()); Professor p = new Funcionario(); //Este código não compila. } } Sobrescrevendo o método obterSalario Classe Abstrata • Classes abstratas podem ser utilizadas para melhorar a legibilidade e manutenibilidade do modelo. São uteis para otimizar o código. • Classes abstratas: não podem ser instanciadas – Poderoso Mecanismo de Abstração: Permite a herança do código sem violar a noção de subtipo “Diz o que deve ter a subclasse, mas não diz como !” – Classe abstrata: • código genérico, livre de particularidades – As subclasses: • detalhes particulares Classe Abstrata • Classes Abstratas: – Não possuem instâncias – Organizam atributos e operações – Geralmente facilitam o reuso de código – Implementação de métodos é feita nas sub-classes – Podem conter métodos implementados Retangulo PoligonoCirculo Forma mover() exibir() public abstract class Funcionario { private String nome; public abstract float obterSalario(); } public class Professor extends Funcionario { public float obterSalario() { return 100; } } public class Teste { public static void main(String args[]) { Funcionario f = new Professor(); System.out.println(f.obterSalario()); Funcionario f = new Funcionario(); Professor p = new Funcionario(); } } Classe Abstrata Classe Concreta Mensagem Classe Abstrata • Métodos Abstratos: – Só a assinatura, sem corpo – Precisam ser implementados pelas subclasses • A classe abstrata enumera características genéricas do modelo, mas não as implementa. • A classe abstrata obriga subclasses (folhas) a implementarem funcionalidades abstratas previstas em seu corpo. • Para isto, cada subclasse se utiliza de seus detalhes particulares. Interfaces • Classes abstratas que possuem apenas métodos abstratos. • Também não podem ser instanciadas • Na Interface: – Métodos são implicitamente “abstract” e “public” – Campos são implicitamente “static” e “final” – Não possuem construtores C. Abstratas X Interfaces • Uma interface é 100% abstrata, uma classe abstrata, necessariamente, não. • Interface: – Todos os métodos são abstratos. 100% • Classe abstrata: – Pode ou não ter métodos abstratos. 0%-100% Construtor Todo objeto criado é inicializado Valores são atribuídos aos dados mantidos pelo objeto durante sua fase de construção Classe ContaEmBanco Encerrar( ) Sacar( valor ) Depositar( valor_cheque ) Depositar( valor_dinheiro ) ContaEmBanco( _Nome, _prof, … ) Exemplo: Construtor • Garante que os objetos são inicializados de forma correta. • Tem o mesmo nome da classe • É sempre executado quando o objeto é criado • Não retorna nenhum valor • Não pode ser chamado diretamente • Pode conter parâmetros • Pode haver mais de 1 método construtor com diferentes parâmetros • Default: sem parâmetros public class Pessoa { private int idade; public Pessoa() { idade = 20; } public int obterIdade() { return idade; }; } public class Professor extends Pessoa { private int horas; public int obterHoras() { return horas; ) public void atribuirHoras(int _h) { horas = _h; } } public class Teste { public static void main(String args[]) { Professor p = new Professor(); System.out.println(p.obterHoras()); System.out.println(p.obterIdade()); } } Construtor Passos para a criação de um objeto 1. Declarar uma referência para o objeto Funcionario func1; 2. Criar uma instância do objeto func1 := new Funcionario(); O sistema operacional aloca espaço em memória para o novo objeto e preenche os seus atributos com valores default (zero para números, nil para referências, false para booleanos, string vazia para Strings. Passos para a criação de um objeto 3. Se houver um método construtor, este é invocado O método construtor é usado para alterar os valores default dos atributos possibilitando que o objeto se torne disponível para a aplicação já em um estado pré- definido 4. Modificação explícita do estado do objeto func1.salario = 4000; // se o atributo é públicofunc1.gravaSalario(4000); // caso contrário A referência para o objeto pode ser usada para alterar o estado dos atributos do objeto. Persistência • O termo persistência está relacionado ao total de tempo que um objeto permanece na memória. • De modo geral, as instâncias das classes são criadas durante a execução do programa e assim que o objeto não é mais necessário, ocorre uma destruição do mesmo, ou seja, o espaço de memória reservado para ele é liberado. Persistência • Um objeto em um Programa Orientado a Objetos surge das seguintes formas : a) O objeto é criado estática ou dinamicamente pelo programa. b) O objeto é recuperado de um arquivo ou de uma base de dados relacional e levado à forma de objeto. c) O objeto é recuperado de uma base de dados orientada a objeto e lido diretamente para utilização. Diagrama de Classes • Conjunto de classes e seus relacionamentos. • Mais importante para a modelagem OO. • Base para os diagramas de colaboração e implantação. P e d id o It e m P e d id o P r o d ut o 10 .. *0 .. * 1c o n té m 16317/6/2012 Diagrama de Classes • Mostra a natureza estática do sistema. – A estrutura modelada é válida em qualquer ponto do ciclo de vida do sistema. – Relações estáticas: • Associações – Uma empresa tem muitos funcionários • Generalizações – Um empregado é um tipo de pessoa • Dependências (agregação/composição) – Uma empresa utiliza caminhões para fazer entregas Diagrama de Classes • Diagrama de classes são a base das abordagens de desenvolvimento OO. • Não use todas as notações: – Comece com os recursos mais simples. – Use características mais avançadas apenas quando necessário. • Perspectiva: – Não inclua muitos detalhes na análise. – Especifique os modelos durante o projeto. – Use modelos de implementação apenas para ilustrar técnicas de implementação específicas. • Mantenha o foco nas áreas mais importantes. – É melhor ter poucos diagramas atualizados que muitos obsoletos. Diagrama de Classes • Criando um diagrama de classes: – Num primeiro momento mantenha-o simples: • Classes mais importantes • Associações mais óbvias – Num segundo momento acrescente: • Atributos • Multiplicidade • Operações • Responsabilidades – Evite classes muito sobrecarregadas. Introdução à Orientação a Objetos Concepção de Sistemas Concepção de Sistemas Concepção de Sistemas Concepção de Sistemas Concepção de Sistemas Concepção de Sistemas Paradigma Paradigma Paradigmas Mais Populares Desenvolvimento Estruturado Desenvolvimento Estruturado Desenvolvimento Estruturado Orientação à Objetos Orientação à Objetos OO X Estruturado OO X Estruturado O paradigma OO O paradigma OO O paradigma OO OO - Vantagens OO - Vantagens OO - Vantagens OO - Desvantagens OO - Histórico Verdades sobre OO Verdades sobre OO Desenvolvimento Orientado a Objetos Objetos Objetos Objetos Objetos Objetos Objetos Objetos Objetos ObjetosVantagens Vantagens Abstração Abstração Abstração Abstração Abstração - Exemplos Abstração - Exemplos Abstração - Exemplo Abstração - Exemplo Abstração - Exemplo Objeto Exercício 1 – Identificação de Objetos Classes Classes Classes Classes Classes Classes Membros de Classes Atributos Atributos Serviços/Operações/Métodos Serviços/Operações/Métodos Serviços/Operações/Métodos Classes ContaEmBanco Objetos do tipo ContaEmBanco Classes - Exemplo Classes - Exemplo Implementação em Java Classes - Exemplo Implementação em Java Implementação em Java Modelagem de Classes Modelagem de Classes Modelagem de Classes Codificação de Classes Modelagem Codificação de Classes Codificação de Classes Codificação de Classes Codificação de Classes Identificando Classes Exercício 1 – Identificação de Classes Exercício 2 – Modelagem de Classes Mensagens Mensagens Mensagens Mensagens Mensagens Mensagens Mensagens Modelagem de Classes Modelagem de Classes Modelagem de Classes Codificação de Classes Exercício Exercício Modelagem de Classes Modelagem de Classes Modelagem de Classes Codificação de Classes Modelagem Modelagem Modelagem Modelagem Modelagem Modelagem Modelagem Associações Associações Associações Visibilidade Multiplicidade Multiplicidade Herança Herança Herança Herança Herança Herança Herança Herança Herança Herança Herança Herança - Exercício Herança - Exercício Herança - Exercício Agregação Agregação Composição Composição Agregação X Composição Classe de Associação Classe de Associação Classe de Associação Classe de Associação Encapsulamento Encapsulamento Encapsulamento Encapsulamento Encapsulamento Polimorfismo Polimorfismo Polimorfismo Sobrecarga Sobrecarga Sobrescrita Classe Abstrata Classe Abstrata Classe Abstrata Interfaces C. Abstratas X Interfaces Construtor Construtor Passos para a criação de um objeto Passos para a criação de um objeto Persistência Persistência Diagrama de Classes Diagrama de Classes Diagrama de Classes Diagrama de Classes
Compartilhar