Você está na página 1de 5

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;

}

// 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);

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;

}

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.

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 ?