ST363_OrientacaoObjeto

download ST363_OrientacaoObjeto

of 39

Transcript of ST363_OrientacaoObjeto

  • 8/6/2019 ST363_OrientacaoObjeto

    1/39

    Orientao a Objetos

    Profa. [email protected]

    FT Faculdade de TecnologiaST363 Linguagem e Tcnica de Programao II

  • 8/6/2019 ST363_OrientacaoObjeto

    2/39

    Programao Orientada a Objetos

    A programao orientada a objetos (OO) focaliza mais oproblema. Um programa OO equivalente a objetos quetrocam mensagens entre si. Os objetos do programaequivalem aos objetos da vida real (problema).

    Primeira linguagem OO: Simula 67

    O paradigma no foi amplamente desenvolvido at que aevoluo de Smalltalk resultasse em sua verso 80 (em1980). Alguns consideram Smalltalk a nica LP puramenteOO.

    Existem linguagens de programao que suportam a

    programao OO, ou seja, seguem algum outro paradigma,mas incorporam recursos para programao OO. Porexemplo: C++: paradigma imperativo com suporte a programao OO; Java: emprega apenas algumas estruturas bsicas do

    paradigma imperativo com suporte a programao OO.

  • 8/6/2019 ST363_OrientacaoObjeto

    3/39

    Programao OO x Estruturada Programao Estruturada:

    Baseia-se no conceito de que um sistema umconjunto de programas inter-relacionados que atuamsobre um determinado conjunto de dados que se

    deseja manipular para obter os resultados desejados. Programao Orientada a Objetos

    Procura enxergar o mundo como um conjunto deobjetos que interagem entre si e apresentamcaractersticas e comportamento prpriosrepresentados por seus atributos e suas operaes,respectivamente. Os atributos esto relacionados aosdados e as operaes, aos processos que um objetoexecuta.

  • 8/6/2019 ST363_OrientacaoObjeto

    4/39

    Conceitos Bsicos

    Objetos

    Mensagens

    Mtodos Classes

  • 8/6/2019 ST363_OrientacaoObjeto

    5/39

    Conceitos Bsicos Objetos Um objeto um conjunto encapsulado de

    operaes e um estado que registra o efeito dasoperaes.

    Um objeto executa uma operao em resposta aorecebimento de uma mensagem que estassociada operao.

    O resultado da operao depende do contedo damensagem recebida e do estado do objeto quando elerecebe a mensagem.

    O objeto pode, como parte da operao, enviar mensagens para outros objetos e para si mesmo.

  • 8/6/2019 ST363_OrientacaoObjeto

    6/39

    Conceitos Bsicos Objetos Pode-se imaginar um objeto como algo que:

    armazena dentro de si os dados (informaes) sobresua estrutura, definida por seus atributos;

    possui um comportamento definido pelas suasoperaes (implementadas por mtodos).

    Exemplo:

    Objeto: Maria Atributos: Nome, Endereo,

    Salrio Bruto

    Operaes: Calcular salrio lquido

  • 8/6/2019 ST363_OrientacaoObjeto

    7/39

    Conceitos Bsicos Objetos

    Uma interface protege os dados e permite acomunicao de um objeto com os demais objetosdo sistema.

    Todo tipo de alterao nos dados do objeto

    (atributos) somente poder ser feita por meio dasoperaes, que recebem as solicitaes externas,fazem as alteraes nos dados (se permitidas) eretornam outras informaes para o meio externo.

  • 8/6/2019 ST363_OrientacaoObjeto

    8/39

    Conceitos Bsicos Objetos

    Comunicao entre Objetos:

  • 8/6/2019 ST363_OrientacaoObjeto

    9/39

    Conceitos Bsicos Mensagens

    As mensagens so requisies enviadas de umobjeto a outro, com o objetivo de se obter algumresultado desejado.

    As mensagens podem ser acompanhadas deparmetros, que so aceitos pelo objeto receptore que podem ter algum efeito nas operaes aserem realizadas.

  • 8/6/2019 ST363_OrientacaoObjeto

    10/39

    Conceitos Bsicos Mtodos

    Os mtodos so definies de operaes que umobjeto realiza quando recebe uma mensagem(similar a subprogramas).

    Uma mesma mensagem poderia resultar emmtodos diferentes, quando enviada paradiferentes objetos.

    O mtodo associado a uma mensagem pr-definido.

  • 8/6/2019 ST363_OrientacaoObjeto

    11/39

    Conceitos Bsicos Classes Uma classe define uma estrutura interna e um

    conjunto de operaes (mtodos) que todos osobjetos, que so instncias da classe, iropossuir.

    Uma classe cria objetos.

  • 8/6/2019 ST363_OrientacaoObjeto

    12/39

    Propriedades

    Encapsulamento Ocultao de Informaes

    Herana Generalizao Polimorfismo

  • 8/6/2019 ST363_OrientacaoObjeto

    13/39

    Propriedades Encapsulamento

    Cada objeto visto como o encapsulamento deseu estado interno, suas mensagens e seusmtodos.

    A estrutura que define o estado interno e os paresmensagem-mtodo so todos definidos pelaclasse a qual o objeto pertence.

    O valor do estado interno determinado pelosmtodos que o objeto executa em resposta smensagens recebidas.

  • 8/6/2019 ST363_OrientacaoObjeto

    14/39

    Fazendo-se um paralelo com a programaoestruturada, o encapsulamento se assemelha aoconceito de modularizao, diferindo:

    no foco: programao estruturada: funcionalidades.

    programao orientada a objetos: objetos e operaes.

    na maneira de implementao: programao estruturada: subprogramas;

    programao orientada a objetos: classes.

    Propriedades Encapsulamento

  • 8/6/2019 ST363_OrientacaoObjeto

    15/39

    O acesso a partes de uma classe pode ser:

    privado: parte da classe fica oculta a outras

    classes, o que caracteriza a ocultao deinformaes;

    pblico: parte da classe fica visvel a outrasclasses;

    protegido: parte da classe fica oculta a outrasclasses, mas visveis a subclasses no caso deherana (propriedade discutida a seguir).

    Propriedades Ocultao de

    Informaes

  • 8/6/2019 ST363_OrientacaoObjeto

    16/39

    A herana possibilita a definio de umahierarquia de classes, onde classes so definidaspela herana de outras.

    Usualmente, os nveis mais baixos em uma

    hierarquia de classes representam umaespecificao mais detalhada e nveis mais altosrepresentam uma especificao mais abstrata(conceito de abstrao).

    Propriedades Herana

    entidade abstrata

    entidade detalhe

    viso mais abstrataviso mais detalhada

  • 8/6/2019 ST363_OrientacaoObjeto

    17/39

    Uma classe que definida pela herana de outra chamada de subclasse ou classe derivada.

    A classe que define uma subclasse denominada

    superclasse. Uma subclasse herda todas as caractersticas da

    superclasse, incluindo a estrutura que define oestado interno e os pares mensagem-mtodo.

    Na subclasse: as caractersticas herdadas podem ser redefinidas,

    sobrepondo-se a definio herdada; novas caractersticas podem ser adicionadas.

    Propriedades Herana

  • 8/6/2019 ST363_OrientacaoObjeto

    18/39

    Propriedades Herana

    As subclasses Motorista, Secretria e Analistaherdam da superclasse Empregados todos os seus

    atributos e operaes. Exemplo: se a superclasse Empregados possui os

    atributos Nome e RG, ento as subclasses tambmtero tais atributos, alm daqueles especficos das

    subclasses.

  • 8/6/2019 ST363_OrientacaoObjeto

    19/39

    A herana pode ser: simples: se a classe criada por meio de herana tiver

    uma nica superclasse;

    mltipla: se a classe criada por meio de herana tivermais de uma superclasse.

    A herana possibilita a definio de novas classes,sem duplicao de cdigo. Isso importante para

    a reutilizao de software, pois possvel reutilizaruma classe criando uma subclasse onde permitido modificar algumas funcionalidades eadicionar outras.

    Propriedades Herana

  • 8/6/2019 ST363_OrientacaoObjeto

    20/39

    Propriedades Generalizao

    O conceito de generalizao surge quandoobserva-se, por exemplo, duas classes econsegue-se abstrair uma terceira classe que

    mais geral do que as duas primeiras. A generalizao permite que todas as instncias

    de uma classe especfica sejam tambmconsideradas instncias de uma classe mais

    abrangente.

  • 8/6/2019 ST363_OrientacaoObjeto

    21/39

    Propriedades Generalizao

    Generalizao pode ser descrita como uma associao um tipo de.

    Exemplo:

    Motorista, Secretria e Analista podem ser considerados classes

    especficas de Empregados (conceito de especializao). Por outro lado, Empregados considerada uma classe mais geral

    (conceito de generalizao) e pode-se dizer que, por exemplo,Motorista um tipo de Empregado.

  • 8/6/2019 ST363_OrientacaoObjeto

    22/39

    Propriedades Polimorfismo

    O polimosfismo permite que uma mesmamensagem seja enviada a diferentes objetos,sendo que cada objeto executa a operaoapropriada sua classe.

    por exemplo, a mensagem "print" pode ser enviada aum objeto, sem a preocupao se aquele objeto umcaractere, um inteiro, uma stringou uma figura.

    O polimorfismo proporcionado pela vinculaodinmica de mensagens a definies demtodos.

  • 8/6/2019 ST363_OrientacaoObjeto

    23/39

    Propriedades Polimorfismo

    Para a implementao do polimorfismo utiliza-se umnico nome para definir operaes implementadasde modos distintos, mas cujo objetivo o mesmo.

    Exemplo Objeto Geomtrico: um objeto geomtrico pode ser, por exemplo, um

    tringulo, um retngulo ou um crculo; uma operao que pode ser definida para qualquer um

    desses trs objetos geomtricos o clculo da rea;

    dependendo do objeto geomtrico, a rea deve sercalculada de uma maneira distinta; entretanto, deve-se observar que nos trs casos a

    operao que ser realizada continuar sendo o clculoda rea de um objeto geomtrico.

  • 8/6/2019 ST363_OrientacaoObjeto

    24/39

  • 8/6/2019 ST363_OrientacaoObjeto

    25/39

    Orientao a Objetos em C++

    A linguagem de programao C++ foi criada paraadicionar novos recursos linguagem C.

    O principal recurso foi suportar a programaoorientada a objetos.

  • 8/6/2019 ST363_OrientacaoObjeto

    26/39

    Orientao a Objetos em C++

    Encapsulamento: realizado por meio do uso declasses. Uma classe C++ uma descrio de umtipo de dado. As classes de C++ so uma extenso do tipo structdo C.

    Ocultao de informaes: uma classe C++ podeter tanto caractersticas ocultas como visveis,especificadas usando as seguintes clusulas: private: especifica as caractersticas ocultas (privadas);

    public: especifica as caractersticas visveis (pblicas).Essas caractersticas so descritas pela interface com osobjetos da classe;

    protected: especifica caractersticas visveis apenas ssubclasses (no caso de herana).

  • 8/6/2019 ST363_OrientacaoObjeto

    27/39

    Orientao a Objetos em C++

    As definies de classes incluem a especificaode construtores (contructors) e destrutores(destructors).

    Construtores: funes responsveis pela inicializao dos objetos; podem fazer a alocao dinmica de memria para os

    objetos, se necessrio; podem incluir parmetros para a parametrizao de

    objetos; so implicitamente chamados quando um objeto daclasse criado;

    podem ser explicitamente chamados; tem o mesmo nome da classe da qual faz parte.

  • 8/6/2019 ST363_OrientacaoObjeto

    28/39

    Orientao a Objetos em C++

    Destrutores:

    funes responsveis pela limpeza quando um objeto destrudo;

    desalocam memria previamente alocada para osobjetos, se necessrio;

    so implicitamente chamados quando se encerra otempo de vida de um objeto da classe;

    podem ser explicitamente chamados;

    tem o mesmo nome da classe precedido por til (~)

  • 8/6/2019 ST363_OrientacaoObjeto

    29/39

    Exemplo: Pilha em C++

    Um tipo abstrato de dados pilha denominado LIFO(Last In, First Out), ou seja, o ltimo elemento aentrar o primeiro a sair, e tem as seguintesoperaes:

    create(pilha) cria e inicializa um objeto do tipo pilha; destroy(pilha) desaloca o armazenamento da pilha;

    empty(pilha) retorna true se a pilha estiver vazia e falsecaso contrrio;

    push(pilha, elemento) coloca o elemento especificado notopo da pilha;

    pop(pilha) remove o elemento do topo da pilha;

    top(pilha) retorna uma cpia do elemento do topo da pilha.

  • 8/6/2019 ST363_OrientacaoObjeto

    30/39

    Exemplo: Pilha em C++

    #include

    using namespace std;

    class pilha {

    private: // visveis somente a outros membrosint *ptr_pilha;

    int tam_max;

    int top_ptr;

    public: // visveis s unidades que usam a pilha

    pilha( ) { // construtor

    ptr_pilha = new int[100];tam_max = 99;

    top_ptr = -1;

    }

    ~pilha( ) { delete ptr_pilha; } // destrutor

  • 8/6/2019 ST363_OrientacaoObjeto

    31/39

    Exemplo: Pilha em C++void push(int numero) {

    if (top_ptr == tam_max)

    cout

  • 8/6/2019 ST363_OrientacaoObjeto

    32/39

    Exemplo: Pilha em C++

    Um exemplo de programa que usa a pilha:void main( ) {int top_one;

    pilha stk; // cria um objeto da classe pilha

    stk.push(42);

    stk.push(17);

    top_one = stk.top( );

    stk.pop( );

    ...

    }

    Quando o final da funo main( ) atingido, encerram-se ostempos de vida das variveis top_one e stk, o que resultana chamada implcita do destrutor para stk. Isso faz comque a desalocao de memria seja realizada.

  • 8/6/2019 ST363_OrientacaoObjeto

    33/39

    Exemplo: Pilha em C++

    Muitas vezes conveniente parametrizar tiposabstratos de dados.

    Por exemplo, pode-se projetar uma pilha que

    possa armazenar qualquer elemento de tipoescalar, em vez de ser necessrio escrever umapilha para cada tipo escalar diferente.

    necessrio que a linguagem de programao

    disponibilize recursos para a parametrizao. C++ suporta tipos abstratos de dados

    parametrizados ou genricos.

  • 8/6/2019 ST363_OrientacaoObjeto

    34/39

    Exemplo: Pilha em C++

    Para tornar o exemplo de pilha anterior genrico em relaoao tamanho da pilha, somente o construtor precisa sermudado:pilha(int tamanho) {

    ptr_pilha = new int[tamanho];

    tam_max = tamanho 1;top_ptr = -1;

    }

    A declarao de um objeto pilha pode ser:

    pilha stk(150);

    A definio da classe pilha pode incluir ambos osconstrutores, de modo que os usurios podem usar a pilhade tamanho padro ou especificar algum outro tamanho.

  • 8/6/2019 ST363_OrientacaoObjeto

    35/39

    Exemplo: Pilha em C++ Pode-se fazer com que o tipo de elemento da pilha

    seja um parmetro usando classes modeladas:templates.

    #include

    using namespace std;

    template // Type o parmetro modelo

    class pilha {

    private: // visveis somente a outros membros

    Type *ptr_pilha;

    int tam_max;

    int top_ptr;

  • 8/6/2019 ST363_OrientacaoObjeto

    36/39

    Exemplo: Pilha em C++

    public: // visveis s unidades que usam o TAD

    // construtor para pilhas de 100 elementos

    pilha( ) {

    ptr_pilha = new Type[100];

    tam_max = 99;

    top_ptr = -1;}

    // construtor para nmero determinado

    pilha(int tamanho) {

    ptr_pilha = new Type[tamanho];

    tam_max = tamanho 1;

    top_ptr = -1;}

    ~pilha( ) { delete ptr_pilha; } // destrutor

  • 8/6/2019 ST363_OrientacaoObjeto

    37/39

    Exemplo: Pilha em C++

    void push(Type numero) {

    if (top_ptr == tam_max)

    cout

  • 8/6/2019 ST363_OrientacaoObjeto

    38/39

    Exemplo: Pilha em C++

    Um exemplo de programa que usa a pilhaparametrizada:void main( ) {

    float top_one;

    pilha stk(50); // cria uma pilha de 50 do tipo realstk.push(4.5);

    stk.push(9.3);

    top_one = stk.top( );

    stk.pop( );

    ...

    }

  • 8/6/2019 ST363_OrientacaoObjeto

    39/39

    Exerccios de Fixao

    1. Defina: Objetos, Mensagens, Mtodos e Classes2. Explique as cinco propriedades da Orientao a

    Objetos.

    3. Qual a diferena de herana simples e mltipla?4. Como feito o encapsulamento e a ocultao deinformaes em C++?

    5. Fazer um programa C++ para testar a classe pilha

    apresentada e implementar dois novos mtodos: um mtodo para imprimir a pilha em ordem inversa.

    um mtodo que retorne o elemento imediatamente antesdo topo da pilha.