Está en la 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 ?