You are on page 1of 44

http://www.takenami.com.

br

Orientao a Objetos
Igor Takenami

Verso 1.0

http://www.takenami.com.br

Histrico
SIMULA
- Anos 60 - Utilizada para simulaes - Conceitos de Classe e SubClasse

SMALLTALK
- Anos 70 - Desenvolvida pela XEROX - Primeira linguagem orientada a objetos de fato - Cada elemento do SMALLTALK tratado como um objeto

http://www.takenami.com.br

Analogia Biolgica
Alan Kay,
- Um dos pais do paradigma da orientao a objetos - Analogia biolgica

Como seria um sistema de software que funcionasse como


um ser vivo?

Cada clula interagiria com outras clulas atravs do envio


de mensagens para realizar um objetivo comum unidade autnoma

Adicionalmente, cada clula se comportaria como uma Construir um sistema de software a partir de agentes
autnomos que interagem entre si

http://www.takenami.com.br

Princpios da Orientao a Objetos


Qualquer coisa um objeto Objetos realizam tarefas atravs da troca de
mensagens com outros objetos

Cada objeto pertence a uma determinada classe Uma classe agrupa objetos similares A classe dene as caractersticas e
comportamento associado ao objeto

http://www.takenami.com.br

Programao Orientao a Objetos


Sistema de software como um conjunto de
agentes interconectados

Agentes = Objetos Cada objeto responsvel por realizar tarefas


especcas

atravs da interao entre objetos que uma


tarefa computacional realizada

http://www.takenami.com.br

Linguagens Orientadas a Objetos


Simula Smalltalk C++ Object Pascal Java .NET

http://www.takenami.com.br

Um sistema Orientado a Objetos uma simulao de um cenrio real (vida) ou ctcio (lme)

http://www.takenami.com.br

Para construir sistemas Orientados a Objetos necessrio entender os conceitos por trs do paradigma

http://www.takenami.com.br

Objeto
Unidade que utilizamos para representar
tocar abstraes em um sistema computacional

No mundo real objeto tudo que podemos No mundo imaginrio um objeto tudo que
podemos representar

http://www.takenami.com.br

A interao entre estes objetos formam grupo de objetos mais complexos que agrupado a outros grupos de objetos complexos do origem ao sistemas reais, como por exemplo o funcionamento de um carro

http://www.takenami.com.br

Caractersticas dos Objetos


nico Possui atributos que denem caratersticas e/ou
estado

Possuem capacidade de realizar aes que


chamamos de mtodos ou funes instncia de uma Classe.

Normalmente se diz que um objeto uma O que uma Classe ?

http://www.takenami.com.br

Classe
Estrutura (molde) que dene os atributos e/ou
estados de um conjunto de objetos com caractersticas similares.

Dene o comportamento de seus objetos (aes


que o objeto pode fazer) atravs de mtodos. objetos

Descreve os servios (aes) providos por seus Quais informaes eles podem armazenar

http://www.takenami.com.br

Atributos de uma Classe


Caratersticas e/ou estado de uma classe Aps a classe ser instanciada em um objeto os

atributos vo receber valores (caratersticas e/ou estados) que denem o objeto

http://www.takenami.com.br

Mtodos de uma Classe


Conjunto de aes que um determinado objeto
pode executar

Denem o que um objeto pode fazer So acionados por outros objetos


- Os objetos se comunicam atravs de mtodos - Troca de mensagens

http://www.takenami.com.br

Construtor da Classe
Mtodo especial denido na classe e executado
no momento que o objeto instanciado retorno

Diferente de outro mtodo pois no possui Deve ter o mesmo nome da classe. Pode receber parmetros
- Normalmente utilizados para inicializar os valores dos atributos do objeto

http://www.takenami.com.br

Para representar classes e objetos em modelos computacionais podemos utilizar uma notao chamada UML

http://www.takenami.com.br

UML
Unied Modeling Language Linguagem para representao de modelos
visuais com um signicado especico e padronizado

UML no uma linguagem de programao Os modelos so representados atravs de


diagramas que possuem semntica prpria classes o Diagrama de Classes

O diagrama que representa a descrio das

http://www.takenami.com.br

Esteretipo de uma Classe em UML

Nome da Classe Atributos da Classe Mtodos da Classe

http://www.takenami.com.br

Estrutura bsica de uma classe


public class Carro { String cor; String marca; int velocidade; public Carro(String cor, String marca){ this.cor = cor; this.marca = marca; velocidade = 0; } public void acelerar(){ velocidade++; } public void parar(){ velocidade = 0; } }

Atributos

Construtor

Mtodos

http://www.takenami.com.br

Representao UML

http://www.takenami.com.br

Instanciando uma Classe


public class Main { public static void main(String[] args) { Carro fusca = new Carro("preto", "volkswagen"); fusca.acelerar(); fusca.acelerar(); fusca.parar(); } }

http://www.takenami.com.br

Abstrao
Depende do Observador !!

http://www.takenami.com.br

Abstrao
Uma abstrao qualquer modelo que inclui os aspectos relevantes de alguma coisa, ao mesmo tempo em que ignora os menos importantes

http://www.takenami.com.br

Abstrao
Representa as caractersticas que devem conter
em uma classe para atender a um determinado problema atender a um determinado problema vista ou abstrao do problema

Somente as caractersticas necessrias para Representao de um determinado ponto de

http://www.takenami.com.br

Para desenvolver aplicaes O.O. necessrio identicar os objetos na vira real, extrair a classe que aquele objeto pertence e selecionar os atributos e mtodos que sero necessrios levando em considerao o modelo computacional que est sendo desenvolvido

http://www.takenami.com.br

O modelo O.O. o conjunto de classes que visam resolver um problema computacional levando em considerao como este problema abordado no mundo real

http://www.takenami.com.br

Associaes
Forma como uma classe se relaciona com outra
classe

Uma classe pode conter atributos que geram


instncias de outra classe
- Uma classe pode conter outra classe como atributo - Quando isto ocorre dizemos que uma classe possui outra classe associada a ela

http://www.takenami.com.br

Associaes
public class Carro { String cor; String marca; int velocidade; Motor ferrari; public Carro(String cor, String marca){ this.cor = cor; this.marca = marca; velocidade = 0; } ferrari = new Motor();

public class Motor { int cavalos; int rotacoes; public Motor(){ }

Observe que o construtor no necessrio

public void diminuir_giro(){ System.out.println("Diminuindo as rotaes do motor."); rotacoes-=1000; } public void aumentar_giro(){ System.out.println("Aumentando as rotaes do motor."); rotacoes+=1000; } public int trabalho_do_motor(){ return rotacoes * cavalos; } }

public void acelerar(){ ferrari.aumentar_giro(); velocidade = ferrari.trabalho_do_motor() / 1000; } public void parar(){ velocidade = 0; } }

http://www.takenami.com.br

Representao UML

http://www.takenami.com.br

Encapsulamento
Separar o programa em partes, tornando cada
parte mais isolada possvel uma da outra

A idia tornar o software mais exvel, fcil de


modicar e de criar novas implementaes

Permite utilizar o objeto de uma classe sem

necessariamente conhecer sua implementao instncia fora da classe onde estes foram criados

Protege o acesso direto aos atributos de uma

http://www.takenami.com.br

Uma grande vantagem do encapsulamento que toda parte encapsulada pode ser modicada sem que os usurios da classe em questo sejam afetados

http://www.takenami.com.br

Herana
Capacidade que uma classe tem de herdar as
caractersticas e comportamentos de outra classe subclasse

Classe pai chamada de superclasse e a lha de Em Java s permitido herdar de uma nica
classe, ou seja, no permite herana mltipla

http://www.takenami.com.br

O objetivo da herana especializar o entendimento de uma classe criando novas caractersticas e comportamentos que vo alm da superclasse

http://www.takenami.com.br

Ao mesmo tempo que a especializao amplia o entendimento de uma classe, a generalizao vai no sentido inverso e dene um modelo menos especializado e mais genrico

http://www.takenami.com.br

Herana
Superclasse de Morcego - Generalizao Subclasse de Mamifero - Especializao

public class Mamifero { int altura; double peso; public void mamar(){ System.out.println("Mamifero mamando"); } }

public class Morcego extends Mamifero { int tamanho_presa; public void voar(){ System.out.println("Morcego Voando"); } }

http://www.takenami.com.br

Classe Morcego
Quais as caractersticas de morcego ?
- altura - peso - tamanho_presa

Quais aes o morcego pode fazer ?


- mamar - voar

http://www.takenami.com.br

Se usarmos os princpios de lgica podemos dizer que todo morcego mamfero porm NO podemos armar que todo mamfero morcego

http://www.takenami.com.br

Observe
1) Mamifero animal_mamifero = new Morcego(); 2) Morcego batman = new Mamifero();

Com base no que foi dito at aqui podemos deduzir que o item
2 deve causar um erro j que no possvel garantir que todo mamfero seja um morcego Mamfero e o objeto para o qual a varivel se refere do tipo Morcego seja compatvel com o seu tipo e neste caso todo Morcego CERTAMENTE um Mamfero

J o item 1 pode parecer estranho, pois a varivel do tipo

Devemos saber que toda varivel pode receber um objeto que

http://www.takenami.com.br

O cdigo apresentado funciona?


Mamifero animal_mamifero = new Morcego(); animal_mamifero.mamar(); animal_mamifero.voar(); Morcego batman = (Morcego) animal_mamifero; batman.voar();

http://www.takenami.com.br

Concluso
Todo Morcego um Mamfero, porem no pode
realizar todas as aes de um morcego
- A varivel que recebe o objeto do tipo Mamfero

Para o Morcego voar necessrio criar uma

nova varivel do tipo Morcego e atribuir o objeto que estava na varivel animal_mamifero CAST

Este tipo de operao recebe o nome de TYPE

http://www.takenami.com.br

Representao UML

http://www.takenami.com.br

Sobrescrita
Substitui o comportamento de uma subclasse
quando herdada da superclasse

Na prtica a sobrescrita reescreve um mtodo


que j tinha sido denido na superclasse
public class Mamifero{ ... public void andar(){ System.out.println("Mamifero andando"); } } } public class Golnho extends Mamifero{ ... public void andar(){ System.out.println("Golnho Nadando"); }

http://www.takenami.com.br

Sobrecarga
a capacidade de denir mtodos com o mesmo
nome
- Possuem a mesma funcionalidade

Necessrio que a assinatura seja diferente


- A mudana na assinatura ocorre alterando a quantidade e/ou tipo de parmetros que um mtodo recebe

http://www.takenami.com.br

Exemplo de Sobrecarga
public int somar(int v1, int v2){ return v1 + v2; } public int operar(int v1, int v2){ return somar(v1, v2); } public int operar (char op, int v1, int v2){ switch(op){ case '+': return somar(v1, v2); break; case '-': return subtrair(v1, v2); } }

You might also like