PROGRAMAÇÃO ORIENTADA A OBJETOS I -TÉCNICAS DE OO. Prof. Angelo Augusto Frozza, M.Sc.

Documentos relacionados
Linguagem de Programação. Diagrama de classes

Java para Desktop. Programação Orientada à Objetos 2 JSE

Programação Orientada a Objetos Relacionamentos entre classes

Diagrama de Classes. Classes. Relacionamentos. Atributos Métodos. Associação. Generalização Dependência Realização. Agregação Composição

Classes e Objetos. Sintaxe de classe em Java

Programação Orientada a Objetos JAVA - NETBEANS

Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

Diagrama de Classes. Viviane Torres da Silva 2/es1

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

15/04/2013. Outro Diagrama de Classes. Primeiro Diagrama de Classes. Diagrama de Classes. Atributos. Eduardo Figueiredo

Programação Orientada a Objetos 2 Flávio de Oliveira Silva, M.Sc.

Orientação a objetos. Objetos ou Instâncias I

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Classes e Objetos INTRODUÇÃO À ORIENTAÇÃO A OBJETOS COM JAVA - MÓDULO II. Classes. Objetos. Um modelo para a criação de objetos

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Engenharia de Software. Aula 10 Representação dos Conceitos de Orientação a Objetos. Prof. Me. Rogério Ferreira

UML (Linguagem Modelagem Unificada) João Paulo Q. dos Santos

Herança Tiago Eugenio de Melo

Diagrama de Classes (Notação) - Aula 11 (parte 2)

p Imagine que um Sistema de Controle do Banco pode ser acessado, além dos Gerentes, pelos Diretores do Banco

MODELAGEM VISUAL DE OBJETOS COM UML DIAGRAMA DE CLASSES.

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos

Programação Orientada a Objetos Flávio de Oliveira Silva 144

UML Diagrama de Classes

Prof. Rogério Albuquerque de Almeida. Programação Orientada a Objetos II Java Terceira aula

Conceitos de Programação Orientada a Objetos

Revisão Diagrama de classes Elementos do diagrama de classes Exemplo: Sistema de matrícula

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE CAMPUS JOÃO CÂMARA UML UNIFIED MODELING LANGUAGE

Diagrama de Classes. Viviane Torres da Silva

AULA 16 HERANÇA. Disciplina: Programação Orientada a Objetos Professora: Alba Lopes

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Fundamentos de Orientação à objetos

Diagrama de Classes. Leonardo Gresta Paulino Murta

Polimorfismo: aprendendo a prever o futuro. Polimorfismo: aprendendo a prever o futuro. Definições (2/5) Definições Tipos de Polimorfismo

Herança e Propriedades

Programação Orientada a Objetos

A modelagem é tida como a parte central de todas as atividades para a construção de um bom sistema, com ela podemos:

Introdução. à UML. Histórico (cont.) Histórico Definição Benefícios Notação Diagrama de Classes Diagramas de Interação Conclusões Revisão

Roteiro. Introdução. Uma Introdução à Programação Orientada a Objetos e JAVA usando NetBeans. Objetos. Princípios da Orientação a Objetos

Modelagem de Processos

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Programação por Objectos. Java

POO29004 Programação Orientada a Objetos

12/03/16. Generalização. Associação. Agregação UML Relações. entre Classes. Composição. Prof.Dr. Enzo Seraphim. Dependência

Engenharia de Software II e III - Material para estudo Diagrama de Classe

AULA 8 Polimorfismo de: coerção, overloading, inclusão e paramétrico Prof. Dr. Fernando Henrique Campos

Programação Orientada a Objetos. SANTOS, Rafael (PLT) e Guia de Estudo SCJP. SIERRA, Kathy e BATES, Bert

Requisitos de sistemas

1 Introdução. 1.1 Teoria dos Sistemas 23/4/2010

Polimorfismo. PARTE II: Java e OO. Polimorfismo. Polimorfismo. Polimorfismo. Polimorfismo

O PARADIGMA ORIENTADO POR OBJETOS

Notas de Aula 04: Herança e polimorfismo.

Interfaces e Classes Abstratas

Programação Orientada a Objeto

Orientação a Objetos AULA 09

UML Relacionamentos. Relacionamento é uma conexão entre itens A maioria dos itens relacionam-se entre si. Quatro tipos de relacionamentos:

UML. Diagrama de Classe

UML LINGUAGEM DE MODELAGEM UNIFICADA Diagrama de Classes

Ex: carro_desportivo poderá ser uma subclasse de automóvel (carro_desportivo é_um automóvel)

Programação Orientada a Objetos

Programação Orientada a Objetos

Desenvolvimento Web TCC Turma A-1

Programação Orientada a Objetos para Redes de Computadores

Análise e Projeto de Sistemas

Orientação a Objetos AULA 06

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Os diagramas de use case capturam os requisitos funcionais do sistema.

Unidade: sobrecarga, construtores e herança

Programação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos

9 Classes Abstractas e Interfaces

Modelagem Orientada a Objeto

Linguagem de Programação II Implementação

Curso teórico: Orientação a Objetos. Matemática computacional Marcos Aurelio Wozhiak Jr webzhiak.com.br

PADRONIZAÇÃO 10. INTERFACES PADRONIZAÇÃO CONTRATOS

UML. Diagrama de Classes

LEIC-T LERC MEIC-T 2011/2012 1º Semestre Programação com Objetos 2012/01/07 11h00m 3/10

Programação Java (nível intermediário) 4. Polimorfismo

Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto

Análise Orientada a Objetos. Análise Orientada a Objetos; O Paradigma de Objetos; A UML.

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces

AULA 02. OBJETIVO: Características da Linguagem Orientada a Objetos.

Orientação a Objetos - Herança

Introdução à orientação a objetos. João Tito Almeida Vianna 18/05/2013

POO UML e Outros Conceitos. Prof. Vicente Paulo de Camargo

POO29004 Programação Orientada a Objetos

Introdução à UML. Prof. Jesus José de Oliveira Neto

Linguagens de Programação Aula 12

Programação Orientada a Objetos

Diagramas de Classes. Diagramas de Classes. Diagramas de Classes. Análise e Projeto de Sistemas OO

Programação OO em Java. Profa Andréa Schwertner Charão DLSC/CT/UFSM

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

Java First-Tier: Aplicações. Sobrecarga. Orientação a Objetos em Java (II) Sobrecarga de Construtores: Exemplo de Declaração

Herança e Polimorfismo

Análise e projeto de sistemas

Simbolos/Componentes desse diagrama:

Tópicos da Aula. Diretrizes Gerais. Trabalho Prático (TP) Pontuação do TP. Tema do Trabalho. Projeto de Software Diagrama de Classes

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Capítulo 2. Orientação a Objetos

Transcrição:

PROGRAMAÇÃO ORIENTADA A OBJETOS I -TÉCNICAS DE OO Prof. Angelo Augusto Frozza, M.Sc. http://about.me/tilfrozza

ROTEIRO Técnicas de Orientação a Objetos Classes e objetos Métodos Subscritos Métodos Sobrecarregados Herança Polimorfismo Classes Abstratas Interfaces

CLASSES Classes são os blocos de construção mais importantes de qualquer sistema O.O.; Uma Classe é uma descrição de um conjunto de objetos que compartilham os mesmos atributos, operações, relacionamentos e semântica; Classes capturam o vocabulário do sistema em desenvolvimento (substantivos, verbos e adjetivos); Podem incluir abstrações que são parte do domínio do problema; P.ex.: itens de software, de hardware e até itens puramente conceituais.

CLASSES A modelagem de um sistema envolve a identificação de itens considerados importantes de acordo com uma determinada visão Domínio do sistema Por exemplo: A construção de uma casa envolve paredes, portas, janelas, cômodos, luzes etc.; Cada conceito pode ser diferenciado dos demais [atributos, métodos (operações) e relacionamentos];

CLASSES Toda Classe possui: Nome - que a diferencie das outras classes; Atributos propriedades que descrevem um intervalo de valores que as instâncias da classe podem apresentar; Abstraem os tipos de dados ou estados que os objetos de uma classe podem abranger; Métodos (operações) implementam serviços que podem ser solicitados por algum objeto da classe para modificar seu comportamento; Abstraem algo que pode ser feito com um objeto; Algumas vezes, a chamada a uma operação de um objeto altera os atributos ou o estado do mesmo;

CLASSES public class Cliente { // Atributos // // Construtor da classe public Cliente() { // Métodos set e get // // Métodos da lógica de negócios //

CLASSES Visibilidade

CLASSES Visibilidade Private (-) Permite o acesso apenas pelos métodos da superclasse em que estão definidos; Public (+) Permite o acesso por qualquer método em qualquer lugar do programa; Protected (#) Permite o acesso apenas pelos métodos da superclasse em que estão definidos; por métodos de subclasses e por membros de outras classes no mesmo pacote;

CLASSES Métodos (operações) são descritos por: Visibilidade Nome Lista de parâmetros Tipo de retorno

CLASSES Encapsulamento É a técnica que faz com que detalhes internos do funcionamento dos métodos de uma Classe permaneçam ocultos para os objetos; Por conta dessa técnica, o conhecimento a respeito da implementação interna da classe é desnecessário do ponto de vista do objeto, uma vez que isso passa a ser responsabilidade dos métodos internos da classe. (Conceitos Encapsulamento: Programação Orientada a Objetos http://www.devmedia.com.br/conceitos-encapsulamentoprogramacao-orientada-a-objetos/18702#ixzz2wb3cuvo4)

CLASSES Encapsulamento Primeira regra: os atributos não podem ser manipulados diretamente em uma classe Em vez disso, deve-se usar métodos set e get Set usado para atribuir valor a um atributo private tipo_de_dado atributo; public void setatributo (tipo_de_dado parametro) { this.atributo = parametro;

CLASSES Encapsulamento Primeira regra: os atributos não podem ser manipulados diretamente em uma classe Em vez disso, deve-se usar métodos set e get Get usado para ler o valor de um atributo private tipo_de_dado atributo; public tipo_de_dado getatributo () { return this.atributo;

DIAGRAMA DE CLASSES Regras úteis: 1. Identificar todas as classes participando na solução proposta pelos diagramas de interação; 2. Desenhar as classes num diagrama de classe; 3. Incluir os atributos identificados no modelo conceitual; 4. Adicionar métodos tal como identificados nos diagramas de interação; 5. Adicionar informação sobre o tipo dos atributos e métodos; 6. Adicionar as associações necessária para permitir a visibilidade de atributos requisitada; 7. Adicionar setas de navegabilidade para indicar a direção da visibilidade de atributos; 8. Adicionar relacionamentos de dependência para indicar outros tipos de visibilidade;

BOAS PRÁTICAS DE PROGRAMAÇÃO Procure adotar boas práticas de programação Endentação correta do código No NetBeans use CRTL + SHIFT + F Convenção de nomes http://www.tiexpert.net/programacao/java/nomenclatura.php

EXERCÍCIO DE FIXAÇÃO Identifique e implemente as classes para os problemas listados a seguir (Aula006c): Clínica médica Reserva de passagens aéreas

RELACIONAMENTOS Objetos se relacionam entre si através de operações (métodos); Exemplo: Objeto FAZENDEIRO: operação tirarleite(); Objeto VACA: operação produzirleite(); Tipos de relacionamentos: Associação: simples, agregação, composição Herança Dependência

ATRIBUTOS DE UMA ASSOCIAÇÃO Nome Nome da associação Papéis Papéis das classes que estão relacionadas pela associação O papel da classe A é o nome do atributo que a classe B possui que guarda o objetivo da classe A Multiplicidades Quantidades de objetos associados a um papel Navegabilidade Indica a direção da relação entre as classes

ASSOCIAÇÃO SIMPLES Utilizada para relacionar duas classes cujos objetos podem se comunicar; Semanticamente representam que as classes "conhecem uma a outra", "estão conectadas com", "para cada X existe um Y ; Deve-se identificar o papel das classes na associação;

ASSOCIAÇÃO SIMPLES public class Funcionario { private Funcionario gerente; private List<Funcionario> subordinados = new ArrayList<Funcionario>(0); // Demais atributos // // Construtor public Funcionario() { // Métodos setters e getters //

AGREGAÇÃO Representa que um tipo de objeto é composto, pelo menos em parte, de outro objeto em uma relação todo/parte; O objeto parte é um atributo do objeto todo; O ciclo de vida do objeto parte é limitado ao ciclo de vida do objeto todo; Porém, a parte vive sem o todo e o todo existe sem as partes (relação todo-parte fraca); A agregação indica que uma das classes do relacionamento é uma parte ou está contida em outra classe Semanticamente representa: "consiste em", "contém", "é parte de".

AGREGAÇÃO Exemplo: Marina e navios: uma marina contém navios Carro e rodas Pedido e item de pedido

AGREGAÇÃO public class Navio { private String nomenavio; Outro exemplo: Pedido e ItemPedido public Navio() { public class Marina { private String nomemarina; private ArrayList<Navio> navios; public Marina() { navios = new ArrayList<Navio>(); public void add(navio umnavio) { navios.add(umnavio);

COMPOSIÇÃO Semelhante a agregação; Existe quando uma classe é composta por outra, de tal forma que a parte que compõe não existe se não existir o todo; Relação todo-parte forte: a parte não vive sem o todo ; Semanticamente equivale a um atributo ( é composto de ); Partes de uma composição não podem ser referenciadas por objetos externos; A remoção do todo implica na remoção das partes; Exemplo: Vaca é composta por Chifres, Cascos, Rabo, Úbere etc.

COMPOSIÇÃO public class Peca{ private int codigopeca; public Peca() { public class Motor { private int idmotor; private ArrayList<Peca> pecas; public Motor() { pecas = new ArrayList<Pecas>(); public void add(peca umapeca) { pecas.add(umapeca);

AGREGAÇÃO X COMPOSIÇÃO Imagine um cenário com 2 objetos: "A" e "B Estamos na dúvida da relação entre eles, então fazemos as perguntas a seguir: 1 - Se eu "deletar" o A, terei que "deletar" também o B? Sim = Composição Não = pode ser Agregação ou nada (vá para a pergunta 2) Exemplo: Pedido e Compras: um Pedido pode ter várias Compras, mas se excluir o Pedido, precisa excluir as Compras não faz sentido ter um objeto Compra sem que ele esteja em algum Pedido sua única razão de existir é "compor" um pedido

AGREGAÇÃO X COMPOSIÇÃO 2 - O objeto B tem alguma utilidade sozinho? Sim = Associação simples Não = Agregação Exemplo: Carro e Rodas: se excluir um Carro, não precisa excluir suas Rodas, pois elas podem servir para outro Carro. Porém, uma roda tem utilidade sozinha? Geralmente não, ela serve sempre para "agregar" uma funcionalidade a outro objeto, como a funcionalidade de andar ao Carro (ou a um outro veículo qualquer), ou até mesmo a funcionalidade para crianças sentarem em um "balanço de árvore" etc.

AGREGAÇÃO X COMPOSIÇÃO O caso de Composição é o mais claro; Já o de Agregação muitas vezes depende da interpretação do analista, pois alguém pode contestar que uma roda tem sim uma utilidade sozinha para algum caso bizarro que ele observou, ou que existe no "mundo particular dele".

HERANÇA (GENERALIZAÇÃO) Uma classe pode possuir um relacionamento de herança com outra classe (mãe e filha); A classe mãe é menos especializada (mais genérica) que a classe filha; Semanticamente representa é um tipo ou é do tipo ; Por exemplo: Vaca é um tipo de mamífero a classe Vaca é derivada da classe Mamifero

HERANÇA public class Veiculo{ private String chassi; private String placa;... public Veiculo() { public class VeiculoDeCarga extends Veiculo { private double cargamaxima; public VeiculoDeCarga () { public class VeiculoDePasseio extends Veiculo { private double quantidadedepassageiros; public VeiculoDePasseio () {

HERANÇA Tutorial http://www.caelum.com.br/apostila-java-orientacaoobjetos/heranca-reescrita-e-polimorfismo/

DEPENDÊNCIA A Dependência deixa explícito que uma mudança na especificação de um elemento pode alterar a especificação do elemento dependente; Os objetos de uma classe esporadicamente usam serviços dos objetos de outra classe; Exemplos de uso: Uma classe chama métodos de outra; Uma classe tem operações que retornam outra classe; Uma classe tem operações que esperam como parâmetro outra classe;

DEPENDÊNCIA public class Moeda { public Moeda(double umvalor, String umnome) { public double getvalor() { public class CaixaRegistradora { public CaixaRegistradora() { public void entrepagamento (int qtdmoeda, Moeda tipomoeda) {

INTERFACE É uma classe sem nenhuma implementação; Contem apenas atributos static final; Todas as operações são abstratas; Os métodos têm apenas a sua assinatura; O relacionamento de realização indica as classes que implementam a interface; Equivale a generalização; É uma alternativa para a herança múltipla em Java;

INTERFACE public interface Autenticavel { public boolean autentica(int senha); public class Gerente implements Autenticavel { public Gerente () { public boolean autentica (int senha) { public class Cliente implements Autenticavel { public Cliente () { public boolean autentica (int senha) {

MULTIPLICIDADE Representa o número de elementos de uma propriedade; Estrutura X..Y onde: Opcional: X = 0 Mandatório: X = 1 Somente um valor: Y = 1 Multivalorado: Y > 1 Valores clássicos: 0..1 1 (equivalente a 1..1 default) * (equivalente a 0..*) 1..*

CLASSES DE ASSOCIAÇÃO Permitem a adição de informações em uma associação; Devem ser transformadas em classes comuns posteriormente para viabilizar implementação;

PROPRIEDADES E OPERAÇÕES ESTÁTICAS Propriedades que não são instanciadas nos objetos; Operações que atuam somente sobre propriedades estáticas; Ambos são acessados diretamente na classe: Exemplo: Pedido.getProximoNumero(); Não é necessário um objeto para acessar a propriedade; Operações estáticas são sublinhadas no diagrama;

PROPRIEDADES E OPERAÇÕES ESTÁTICAS public class ContaBancaria { private double saldo; private int numeroconta; private static int ultimacontacriada = 1000; public static final double TAXA_CHEQUE_ESPECIAL = 5; public ContaBancaria () { // aqui vai uma forma de inicializar a // propriedade estática, por exemplo: this.ultimacontacriada++; this.numeroconta = this.ultimacontacriada; Desafio: Implementar um protótipo do jogo Percorrer Labirinto.

PROPRIEDADES DERIVADAS São propriedades que na verdade não existem como atributos ou associações; Podem ser inferidas por outras propriedades da classe; É interessante explicitar através de nota ou restrição a fórmula de derivação; São marcadas com o símbolo / ;

CLASSES E OPERAÇÕES ABSTRATAS Classes que não podem ter instâncias Usualmente têm operações abstratas, ou seja, sem implementação; Suas subclasses usualmente são concretas Implementam métodos com comportamentos específicos para as operações abstratas; Utilizam nome em itálico;

PACOTES Em algumas situações se deseja ter uma visão geral das partes do sistema; Para isso, o diagrama de pacotes é a ferramenta indicada; Pacotes agregam classes e outros pacotes Dependências podem ser inferidas indiretamente; Exemplo: Classe C1 pertence ao pacote P1 Classe C2 pertence ao pacote P2 Classe C1 depende da classe C2 Logo, pacote P1 depende do pacote P2

PACOTES

POLIMORFISMO O polimorfismo indica o princípio de que o comportamento pode variar com base no tipo real de um objeto; Podemos escrever métodos que recebem instâncias de uma classe C e esses mesmos métodos serão capazes de processar instâncias de qualquer classe que herde da classe C;

POLIMORFISMO Tutorial: http://www.caelum.com.br/apostila-java-orientacao-objetos/heranca-reescritae-polimorfismo/#7-8-discussoes-em-aula-alternativas-ao-atributo-protected

MÉTODOS SUBSCRITOS Refere-se a possibilidade de se reescrever a implementação (override) de um método existente em uma superclasse public class Pessoa { protected String nome; protected String endereco; public Pessoa() {... public String getnome() { return nome;

MÉTODOS SUBSCRITOS public class Aluno extends Pessoa { public Aluno() { //se os membros foram declarados como protected super.nome = Algum nome ; super.endereco = Algum endereco ; System.out.println( Construtor de Aluno... ); @override public String getnome() { System.out.println( getnome da sub-classe ); return nome; public void meumetodo(string algo) { System.out.println( Metodo do aluno... + algo);

MÉTODOS SUBSCRITOS public class Empregado extends Pessoa { public Empregado() {... @override public String getnome() { System.out.println( Nome do empregado: + nome); return nome;

MÉTODOS SOBRECARREGADOS Dois métodos de uma mesma classe podem ter o mesmo nome, desde que suas listas de parâmetros sejam diferentes, constituindo assim uma assinatura diferente Tal situação não gera conflito pois o compilador é capaz de detectar qual método deve ser escolhido a partir da análise dos tipos de argumentos do método. public static void setano (ano: integer) {... public static void setano (ano: String) {...

Associação (linha contínua): as duas classes são independentes e podem trabalhar juntas. A visibilidade destaca qual lado consegue enxergar as extremidades da associação, mas ambas as classes podem estabelecer o relacionamento. Exemplo: Cliente e Fornecedor.

Dependência (seta tracejada): é o relacionamento mais fraco da UML, simplesmente diz que um elemento client (que atira a seta) é semanticamente ou estruturalmente dependente do supplier (que recebe a seta). Exemplo: Produto e AliquotaImposto.

Agregação (linha contínua com diamante branco): a classe que possui o diamante branco controla a associação. Exemplo: Equipe e Pessoa. A equipe é quem pode estabelecer o relacionamento, você adiciona pessoas à equipe. Uma pessoa por sí só não pode "entrar na equipe". É a equipe que manda no relacionamento, mas mesmo assim, as classes são independentes. Pessoas existem fora de equipes. METÁFORA: Podemos dizer que a classe que possui o diamante branco é a MULHER, ela quer controlar o relacionamento!

Composição (linha contínua com diamante negro): a composição é uma agregação mais forte. A classe que possui o diamante controla a associação, e além disso, a outra classe só pode existir associada à classe que tem o diamante e não pode estar associada a outras instâncias. Exemplo: Nota e ItemNota, Pedido e ItemPedido. METÁFORA: A classe com o diamante negro é uma MULHER CIUMENTA, além de controlar o relacionamento, não permite que o composto se associe com mais ninguém e julga que o outro não existe sem ela...

TUTORIAL OO Java e Orientação a Objetos Apostila do curso FJ-11 (Caelum Ensino e Inovação) http://www.caelum.com.br/apostila-java-orientacao-objetos/ Programação Orientada a Objetos http://www.metropoledigital.ufrn.br/aulas/disciplinas/poo/