5

Click here to load reader

Programação OOP (Java)

Embed Size (px)

DESCRIPTION

Uma abordagem simples sobre técnicas de OOP aplicadas a Java.

Citation preview

Page 1: Programação OOP (Java)

Programação Orientada a Objetos Orientação a Objetos: é um estado da mente, uma maneira de ver o mundo todo em termos de objetos. Programação Orientada a Objetos: é uma disciplina de software que modela o programa em termos de objetos do mundo real. A POO divide o programa em vários objetos inter-relacionados. Ela complementa a programação modular, suportando encapsulamento, assim como eliminando deficiências da reutilização através da herança e deficiências de tipos através do polimorfismo. Precursores da POO Linguagem de Máquina (binário, hexadecimal) Linguagem Assembler (Baixo Nível) Linguagem Não-Estruturadas (Fortran, Basic) Linguagem Estruturada (C, Pascal) Linguagem Modular (Clipper) Linguagem Visual (Delph, Visual Basic) Linguagem Orientada a Objetos ( Smaltalk, C++, Java) Exemplo de um programa Orientado a objetos em java public class Item { private double unit_price; private double discount; // uma porcentagem de desconto que se aplica ao preço private int quantity; private String description; private String id; // constructor public Item (String id, String description, int quantity, double price){ this.id = id; this.description = description; if (quantity >= 0) { this.quantity = quantity; } else { this.quantity = 0; } this.unit_price = price; }

Page 2: Programação OOP (Java)

// acessor public double getAdjustedTotal(){ double total = unit_price * quantity; double total_discount = total * discount; double adjusted_total = total - total_discount; return adjusted_total; } // mutante public void SetDiscount( double discount) { if (discount <= 1.00) { this.discount = discount; } else { this.discount = 0.0; } } // acessor public double getDiscount() { return discount; } // acessor public int getQuantity() { return quantity; } // mutante public void setQuantity (int quantity) { if (quantity >= 0) { this.quantity = quantity; } } // acessor public String getProductID() { return id; } // acessor public String getDescription() { return description; } } // parte principal public static void main( String [] args) { // cria itens --- instancia Item milk = new Item( "dairy-011", "1 gallon Milk", 2, 2.50); Item yogurt = new Item( "dairy-032", "peach yogurt", 4,0.68); Item bread = new Item( "bakery-023", "sliced bread", 1, 2.55);

Page 3: Programação OOP (Java)

Item soap = new Item( "househo-21", "6 pack soap", 1,4.51); // aplica cupons milk.SetDiscount(0.15); // obtém preços ajustados double milk_price = milk.getAdjustedTotal(); double yogurt_price = yogurt.getAdjustedTotal(); double bread_price = bread.getAdjustedTotal(); double soap_price = soap.getAdjustedTotal(); // imprime recibo System.out.println("Thank you for your purchase."); System.out.println("please come again!"); System.out.println(milk.getDescription() + "\t $" + milk_price ); System.out.println(yogurt.getDescription() + "\t $" + yogurt_price); System.out.println(bread.getDescription() + "\t $" + bread_price); System.out.println(soap.getDescription() + "\t $" + soap_price); // calcula e imprime valor total double total = milk_price + yogurt_price + bread_price + soap_price; System.out.println("total price \t $" + total ); } Definições: Estado de um objeto: é o significado combinado das variáveis internas do objeto. Variável interna: é um valor mantido dentro de um objeto. Implementação: Define como algo é feito (código do programa). Domínio: é o espaço onde um programa reside. Conjunto de conceitos que representam os aspectos importantes do problema que você está tentando resolver. Classe: define os atributos e comportamentos comuns compartilhados por um tipo de objeto. Os objetos de certo tipo ou classificação compartilham os mesmos comportamentos e atributos. Atributos: São as características de uma classe visíveis externamente. A cor dos olhos e a cor dos cabelos são exemplos de atributos. Comportamento: é uma ação executada por um objeto quando passada uma mensagem ou em resposta a uma mudança de estado: é algo que um objeto faz. Construtores: são métodos utilizados para inicializar objetos durante sua instanciação. Chamamos criação de objetos de instanciação porque é criada uma instância do objeto da classe. Item Milk = New Item (“Milk01”,”tipo morango”, 2, 2.5) Acessores: Dão acesso aos dados internos de um objeto. Os acessores permitem que você mude ou recupere o valor. Pode ser direto: Public Double GetDiscount(){ Return Discount; }

Page 4: Programação OOP (Java)

ou pode realizar o processamento antes de retornar um valor: public double getAdjustedTotal(){ double total = unit_price * quantity; double total_discount = total * discount; double adjusted_total = total - total_discount; return adjusted_total; } Mutantes: Permitem que você altere o estado interno de um objeto. Public void SetDiscount( double discount) { if (discount <= 1.00) { this.discount = discount; } else { this.discount = 0.0; } } This: Referência que aponta para a instância do objeto. A instância usa essa referência (this) para acessar suas próprias variáveis e métodos. Polimorfismo: Ter muitas formas. Em termos de programação muitas formas significa que um único nome pode representar um código diferente, selecionado por algum mecanismo automático. Assim, o polimorfismo permite que um único nome expresse muitos comportamentos diferentes. Sobreposição: É um tipo importante de polimorfismo. Delegação: É o processo de um objeto passar uma mensagem para outro objeto, para atender algum pedido. Herança: É um mecanismo que permite a você basear uma nova classe na definição de uma classe previamente existente. Usando herança, sua nova classe herda todos os atributos e comportamentos presentes na classe previamente existente. Quando uma classe herda de outra, todos os métodos e atributos que aparecem na interface da classe previamente existente aparecerão automaticamente na interface da nova classe.

Page 5: Programação OOP (Java)

Vantagens e Objetivos da Orientação a Objetos Natural – Não precisamos saber como um software funciona para usá-lo e sim no que ele faz. Confiável – Aceita alterações em uma parte do programa. È possível validar um componente independentemente dos outros, podendo-se reutilizá-lo com confiança. Reutilizável – Assim como os módulos, podemos utilizar objetos em muitos programas diferentes. A POO introduz a herança para permitir que você estenda objetos existentes e o polimorfismo, para escrever código genérico. Manutenível – Para corrigir um erro, você simplesmente corrige o problema em um lugar. Como a mudança no código é transparente, todos os objetos se beneficiarão. Extensível – A POO apresenta vários recursos para estender o código. Esses recursos são: herança, polimorfismo, sobreposição, delegação e uma validade de padrões de projeto. Oportuno – Quando dividimos o programa em vários objetos (uma classe para cada desenvolvedor) o desenvolvimento de cada parte pode ser em paralelo. O software natural simplifica o projeto de sitemas complexos, porque podemos nos concentrar no problema a resolver. Questões: 1 – O que é programação procedural? 2 – Qual vantagem a programação procedural tem em relação à programação não-estruturada? 3 – O que é programação modular? 4 – Quais vantagens a programação modular tem em relação a programação procedural? 5 – Liste uma deficiência da programação procedural e da modular? 6 - O que é programação orientada a objetos? 7 – Quais são as 6 vantagens e objetivos da programação orientada a objetos? 8 – Explique um dos objetivos da programação orientada a objetos. 9 – Defina os seguintes termos: classe, objeto, comportamento 10 – Como os objetos se comunicam entre si? 11 – O que é um construtor? 12 – O que é um acessor? 13 – O que é um mutante? 14 – O que é this ?