Académique Documents
Professionnel Documents
Culture Documents
CENRIO ESTRUTURAL
Foco principal nas funes, depois nos dados, informaes desencontradas. Idias e necessidades dos usurios normalmente no ficam claras.
Baixa modularizao
CENRIO OO
Foco principal nos objetos do mundo real, com suas funes e dados agrupados. Deve-se fazer o levantamento de requisitos do sistema j pensando nos objetos do mundo real. Diminuio do tempo e custo do sistema
Reutilizao de Cdigo Modularizao Facilidade na Manuteno
OBJETO
Um objeto denota uma entidade, seja ela de natureza fsica ou conceitual ou de software.
Entidades fsicas: um carro, uma pessoa, uma casa, etc. Entidade conceitual: um organograma de uma empresa. Entidade de software: um boto em uma interface grfica.
OBJETO
uma entidade capaz de reter um estado e que oferece uma srie de operaes. um conceito, uma abstrao, algo com limites e significados ntidos em relao ao domnio de uma aplicao. Facilitam a compreenso do mundo real. Incorporam: Estado, Comportamento e Identidade.
ESTADO DE UM OBJETO
O estado de um objeto representa uma das possveis condies em que um objeto pode se encontrar. O estado representado pelos valores das propriedades de um objeto em um determinado instante. Esse estado, geralmente, muda ao longo do tempo.
Nome: Maurcio Matrcula: 105018 Semestre de Ingresso: 2000A
21/09/2009
COMPORTAMENTO DE UM OBJETO
O comportamento determina como o objeto pode responder a interaes mediante ativao de operaes decorrentes de mensagens recebidas de outros objetos. Objeto: Aluno Comportamento: solicitaMatrcula() solicitaDispensa () checaHistorico() Cada objeto tem um nico identificador, mesmo que seu estado seja idntico ao de outro objeto.
CLASSE
Uma classe a descrio de um grupo de objetos com propriedades semelhantes (atributos), mesmo comportamento (operaes), mesmos relacionamentos com outros objetos e mesma semntica. Um objeto uma instncia de uma classe. Pode ser vista como ma abstrao que:
Enfatiza caractersticas relevantes Abstrai outras caractersticas
CLASSE
Nomeando classes
Uma classe deve ter como nome um substantivo singular que melhor caracteriza a abstrao. Dificuldades na nomeao das classes podem indicar abstraes mal definidas. Nomes devem surgir diretamente do domnio do problema. Nomes devem comear com letra maiscula. Em caso de mais de uma palavra no nome da classe, cada palavra deve ter a primeira letra maiscula. Ex: ControleAcademico.java.
ATRIBUTO
O estado de um objeto dado por valores de atributos e por ligaes que tem com outros objetos Atributos so definidos a nvel de classe, enquanto que valores de atributos so definidos a nvel de instncia. Exemplos:
Uma pessoa (classe) tem os atributos nome, data de nascimento e peso. Joo uma pessoa (instncia da classe Pessoa) com nome Joo da Silva, data de nascimento 18/03/1973 e peso 70kg.
HERANA E HIERARQUIA
Hierarquia
Quando vamos trabalhar com um conjunto grande de classes de objetos, necessrio organizar estas classes de maneira ordenada de modo que tenhamos uma hierarquia. Em uma hierarquia de classes teremos as classes mais genricas no topo e as mais especficas na base.
Os mtodos pblicos de uma classe definem a interface da classe. Os mtodos privados no fazem parte da interface pois no podem ser acessados externamente.
21/09/2009
HIERARQUIA
Automveis
Automveis Utilitrios
Utilitrios urbanos Utilitrios off-road
HERANA
Em uma hierarquia de classes semelhantes, podemos dizer que as classes mais especficas herdam as caractersticas das mais genricas, ou seja, todo automvel de passeio famlia um automvel de passeio. A classe de nvel superior na associao de herana chamada de super-classe e a inferior de sub-classe Automvel de passeio famlia uma sub-classe de automvel de passeio.
Automveis Passeio
Passeio famlia Passeio esportivo
Automveis de Carga
Carga inflamvel Carga com frigorfico
AGREGAO X COMPOSIO
Agregao
Um objeto contm uma lista de outros objetos Os objetos contidos podem existir sem serem parte do objeto que os contm. Ex.: Aluno Disciplinas. Um aluno pode ter vrias disciplinas, porm, uma disciplina pode existir sem um aluno.
ENCAPSULAMENTO
o processo de ocultao de caractersticas internas do objeto.
Cuida para que certas caractersticas no possam ser vistas ou modificadas externamente.
Ex.:
Podemos dizer que o motor do automvel est encapsulado, pois normalmente no podemos ver ou alterar caractersticas internas do motor.
Composio
Um objeto contm uma lista de outros objetos Os objetos contidos no fazem sentido fora do contexto do objeto que os contm. Ex.:Pedido Itens. Se voc destruir o pedido, os itens so destrudos junto, eles no tem sentido fora do pedido.
ENCAPSULAMENTO
No contexto de OO, o encapsulamento protege os dados que esto dentro dos objetos, evitando assim que os mesmos sejam alterados erroneamente. Os dados s podero ser alterados pelas funes dos prprios objetos. Existe tambm o encapsulamento a nvel de pacotes.
POLIMORFISMO
Qualquer objeto Java que passar por mais de um teste IS-A pode ser considerado polimrfico.
Exceto Object qualquer objeto Java pode ser considerado polimrfico.
21/09/2009
POLIMORFISMO
public interface Animatable { public void animate(); } class PlayerPiece extends GameShape implements Animatable{ public void movePiece(){ System.out.println(moving game piece); } public void animate() { System.out.println(animating...); } ///mais codigo }
POLIMORFISMO
Isso significa que PlayerPiece pode ser tratado como um dos quatro tipos a qualquer momento:
Um Objeto (qualquer objeto herda de object) Um GameShape (PlayerPiece herda de GameShape) Um PlayerPiece ( o que PlayerPiece realmente ) Um Animatable (PlayerPiece implementa um Animatable)
Possveis declaraes:
PlayerPiece player = new PlayerPiece(); Object o = player; GameShape shape = player; Animatable mover = player;
21/09/2009
CASTING
Fora uma varivel a ser de um determinado tipo
public class CastTest2 {
public static void main(String args[]){
Animal[] a = {new Animal(), new Dog(), new Animal()}; for(Animal animal: a){ animal.makeNoise(); if (animal instanceof Dog) { animal.playDead(); //tenta se comportar como um cachorro } } } } class Animal{ void makeNoise(){System.out.println("generic noise!");} } class Dog extends Animal{ void makeNoise(){System.out.println("latido");} void playDead(){System.out.println("embola");} }
21/09/2009
CASTING
public class CastTest2 {
public static void main(String args[]){
CASTING
class Animal{} class Dog extends Animal{} class DogTest{ public void static main(String args[]){ Animal animal = new Animal(); Dog d = (Dog) animal; //compila mais falha em tempo de execuo String s = (String) animal; //no compila !!! } } Java.lang.ClassCastException
Animal[] a = {new Animal(), new Dog(), new Animal()}; for(Animal animal: a){ animal.makeNoise(); if (animal instanceof Dog) { Dog d = (Dog) animal; d.playDead(); //tenta se comportar como um //cachorro } } } } class Animal{ void makeNoise(){System.out.println("generic noise!");} } class Dog extends Animal{ void makeNoise(){System.out.println("latido");} void playDead(){System.out.println("embola");} }
class DogTest{ public void static main(String args[]){ Dog d = new Dog(); Animal a1 = d; //upcast sem cast explicito Animal a2 = (Animal) d; //upcast com cast explicito } }
ESTTICAS
public class Frog { static int frogCount = 0; public Frog(){ frogCount += 1; } } class TestFrog{ public static void main(String[] args){ new Frog(); new Frog(); Frog f = new Frog(); System.out.println("Frog count is now "+Frog.frogCount); System.out.println("Frog count is now "+f.frogCount); //tambm funciona } }
21/09/2009
ACOPLAMENTO E COESO
Relacionamento direto com a qualidade do design Orientado a Objetos. Bom design Orientado a objetos:
Baixo nvel de acoplamento Alto nvel de Coeso
ACOPLAMENTO
Grau de conhecimento de uma classe sobre o desenho de outra classe. Se o nico conhecimento que uma classe A tem sobre uma classe B o que a classe B exps atravs de sua interface, ento as classes A e B tm um baixo nvel de acoplamento. Se a classe A sabe sobre partes da classe B que no so interfaces de B, ento as classes A e B tm um alto nvel de acoplamento.
O que aconteceria com a classe A em um caso de melhoria na classe B ?
ACOPLAMENTO
Aplicaes no triviais utilizando OO so uma mistura de muitas classes e interfaces trabalhando juntas. Todas as interaes entre objetos devem ser baseadas em contratos.
public class DoTaxes { float rate; float doColorado(){ SalesTaxRates str = new SalesTaxRates(); rate = str.salesRate; //faz alguma coisa com rate return rate; } } class SalesTaxRates{ public float salesRate; public float adjustedSalesRate;
COESO
Tem a ver com o design de uma nica classe. Termo utilizado para indicar o grau em que uma classe tem um nico e bem definido propsito. Benefcio de alta coeso: Classes fceis de manter (e menos freqentemente alteradas) e tendncia a uma maior reusabilidade que classes com um menor nvel de coeso.
public float getSalesRates(String region){ salesRate = new DoTaxes().doColorado(); //faz calculos baseados na regiao return adjustedSalesRate; } }
COESO
Baixo Grau de Coeso !! Uma classe tem vrios mtodos com tarefas bem distintas.
class BudgetReport{ void connectToRDBMS(){} void generateBudgetReport(){} void saveToFile(){} void print(){} }
COESO
Alto grau de Coeso !! Cada classe tem seu papel bem definido.
class BudgetReport{ Options getReportOptions(){} void generateBudgetReport(Options o){} } class ConnectToRDBMS{ DBConnection getRDBMS(){} } class printStuff{ PrintOptions getPrintOptions(){} } class FileSaver{ SaveOptions getFileSaveOptions(){} }
21/09/2009
EXERCCIOS
1.
EXERCCIOS
Qual o resultado ?
1. 2. 3.
Relacionamento tem um (HAS-A) sempre se associa a herana. Relacionamento tem um (HAS-A) sempre se associa a variveis de instncia. Relacionamento tem um (HAS-A) sempre requerem pelo menos dois tipos de classes. Relacionamento tem um (HAS-A) sempre se associa a polimorfismo. Relacionamentos tem um (HAS-A) sempre indicam forte acoplamento
3.
4.
5.
Flip a clidlet Flip a clidder Flip a clidder Flip aClidlet Flip a clidlet Flip aClidder Falha na compilao
2.
Dado:
Class Clidders { public final void flipper(){print(clider)} } Public class Clidlets extends Clidders{ public void flipper(){ print(flip a clidlet); super.flipper(); } public static void main(String[] args){ new Clidlets().flipper(); } }
Os atributos de uma classe so todos privados. A classe se refere a um pequeno nmero de outros objetos. Os objetos contm apenas um pequeno nmero de variveis. improvvel que mudanas realizadas em uma classe requeiram mudanas na outra classe.
EXERCCIOS
4.
EXERCCIOS
5.
Dado:
Class Clidders { private final void flipper(){print(clidder)} } Public class Clidlets extends Clidders{ public final void flipper(){ print(clidlet); } public static void main(String[] args){ new Clidlets().flipper(); } }
Dado:
class Zing{ protected Hmpf h; } class Woop extends Zing{} class Hmpf {}
Qual o resultado ? 1. clidlet 2. clidder 3. clidder clidlet 4. clidlet clidder 5. Falha na compilao
Quais afirmativas so verdadeiras ? 1. Woop um Hmpf e tem um Zing. 2. Zing um Woop e tem um Hmpf. 3. Hmpf tem um Woop e Woop um Zing 4. Woop tem um Hmpf e Woop um Zing 5. Zing tem um Hmpf e Zing um Woop.
RESPOSTAS
1. 2. 3. 4.
5.
2 5 (um mtodo final no pode ser sobrescrito) 4 1 (um metodo final no pode ser sobrescrito, por, nesse caso ele privado, no visvel na subclasse) 4