Você está na página 1de 33

CO023 - Programao Orientada a Objetos

Introduo a Programao Orientada a Objetos


Prof. Elder Jos Reioli Cirilo elder@ufsj.edu.br

Paradigmas de Programao
! Programao Funcional
! o programador pode estruturar os algoritmos em termos de reescrita de funes

! Programao Imperativa
! o programador pode estruturar os programas em termos de comandos e mudanas de estados

! Programao Orientada a Objetos


! Possui suas razes em Simula e Smalltalk ! Sucesso com C++ e Java

Exemplo

Joo deseja enviar flores para Maria mas ela mora em outra cidade. Joo vai, ento, at a floricultura e pede a Jos, o floricultor, para que ele envie um buqu de rosas ao endereo de Maria. Jos, por sua vez, liga para uma outra floricultura, da cidade de Maria, e pede para que as flores sejam entregues.

Nomenclatura OO
! Joo precisa resolver um problema ! Ento ele procura um agente, Jos, e passa uma mensagem contendo sua requisio: enviar rosas para Maria ! Jos tem a responsabilidade de, atravs de algum mtodo, cumprir a requisio ! O mtodo utilizado por Jos pode estar oculto de Joo

Modelo OO
! Uma ao se inicia atravs do envio de uma mensagem para um agente (um objeto) responsvel por tratar a ao. ! A mensagem carrega uma requisio, alm de toda a informao necessria (argumentos) para que a ao seja executada ! Se o agente receptor da mensagem a aceita, ele tem a responsabilidade de executar um mtodo para cumprir a requisio.

Elementos OO - Objeto
! A construo principal de qualquer linguagem orientada a objetos ! Caracterstica:
! Encapsula dados e operaes ! Oferece uma interface de acesso aos dados

! Nomenclatura:
! Operaes tambm so denominados de mtodos ! Dados tambm so denominados atributos ou campos

Elementos OO - Objeto
! A execuo de uma operao
! realizada atravs do envio de uma mensagem que consiste do nome da operao possivelmente acompanhada de parmetros

objeto.metodo(parametros)!

Elementos OO - Objeto
! Acesso a um atributo
! realizado atravs de um mecanismo similar

objeto.atributo!

Elementos OO - Objeto
! Notao uniforme ... mas comportamentos distintos
! invocar um mtodo corresponde a seleo em certos casos dinmica de qual mtodo ser executado ! invocar um atributo corresponde uma operao esttica

! O acesso ao membro (mtodos e atributos) pode ser limitado


! pblicos ! protegidos ! privados

Elementos OO - Objeto
! Observe que
! cada objeto pode conter seu conjunto de dados (atributos) e operaes (mtodos)

! Mas ...
! concordam que uma perda de espao?

Em um programa, objetos podem se diferenciar apenas pelos valores de seus dados e no pela estrutura ou pelas suas operaes

Elementos OO - Classe
! Para solucionar este problema
! Linguagens OO oferecem algum mecanismo organizacional ! Um, dentre eles, o de Classe

! Classe
! Um modelo para objetos

! Estabelece:
! tipo de cada atributo em conjunto com seus nomes ! [ara cada mtodo ... assinatura, visibilidade, implementao

Elementos OO - Classe class Counter{" !private int x; ! !public void reset() { ! ! !x = 0; ! !} ! ! !public int get() { ! ! !return x; ! !}" !! !public void inc(){ ! ! !x = x+1; ! !} ! } !

Elementos OO - Classe
! Objetos so dinamicamente criados (alocados)
! pela instanciao de Classes

! Este mecanismo varia de linguagem para linguagem


! SIMULA ! procedimento que retorna um ponteiro para um record ! Smalltalk ! um objeto que trabalha como um esquema utilizado na definio de outros objetos ! C++ e Java ! corresponde a um tipo e todos objetos so tratados como valores deste tipo

Elementos OO - Classe
! Instanciao ...

Counter c = new Counter(); !

Counter d = new Counter(); !

Elementos OO - Classe

Elementos OO - Classe
! Algumas linguagens permitem
! Mtodos e Atributos associados a Classe ! geralmente denominados elementos estticos e armazenados na classe ! e obviamente mtodos estticos no podem referenciar atributos via this

Encapsulamento
! Garante a proteo de cdigo
! toda linguagem permite a ocultao de partes do objeto

! Vises
! Publica
! acessvel fora da classe

! Privada
! acessvel somente por partes internas a classe

! Protegida
! acessvel geralmente por sublcasses

Herana
! Em linguagens baseadas em Classes
! classes podem herdar mtodos e atributos de classes existentes (classes base e superclasses)

Herana de Implementao ! Habilita o reuso dentro da programao orientada a objetos Herana de Tipo ! Uma classe tambm pode ser vista como um subtipo de outra classe

Herana de Tipo
! Uma Classe define um tipo
! valores so instancias (objetos) da prpria classe

! Herana de Tipo basicamente ...


! declara que a classe compatvel com as classes herdadas

! Em orientao a objetos ...


! definida em termos das operaes admissveis sobre os valores do tipo

Herana de Tipo
! Suponha dois tipos (classes) T e S onde ...
! classe T um subtipo da classe S

! Pela Herana de Tipo


! toda mensagem que chega a um objeto de S tambm entendida por um objeto de T

! Linguagens como Java ...


! utilizam equivalncia de tipos baseada em nomes ! explicitamente introduzida pelo programador

! outras linguagens possuem equivalncia estrutural


! compatibilidade implcita

Herana de Tipo
! Permite que objetos de um subtipo ocorram quando objetos do supertipo so esperados ! Mecanismos geralmente denominado cast
! no transforma T em S por exemplo ! verifica se existe uma compatibilidade entre T e S

! Nem todo tipo de cast permitido


! s os passveis de verificao

! til para downcast


! utilizar objetos da superclasse quando esperando objeto da subclasse

Herana de Tipo
! Caracterstica fundamental da herana
! possibilidade da subclasse modificar a definio de um membro presente na superclasse

! Mtodo ! Overloading ! Atributo ! shadowing

! Classes abstratas
! implementao de certos mtodos so postergados ou omitidos ! subclasse fica a cargo de oferecer uma implementao concreta ! Consequncia: classes abstrata no podem ser diretamente instancias.

Polimorfismo e Ligao Dinmica


! Com herana de tipo ...
! possvel tratar diversas classes de maneira homognea, por exemplo, atravs da interface do tipo mais abstrato. ! ou por outro lado, um objeto de uma classe pode assumir diferentes tipos em diferentes contextos.

! Uma classe dita polimrfica quando ...


! o sistema de tipos da linguagem capaz de associ-la a mais de um tipo.

Polimorfismo e Ligao Dinmica


! Existe basicamente duas formas de polimorfismo em classes ! Inclusivo
! generalidade obtida a partir de um tipo mais geral ! permite a uma classe estar associada a um nmero infinito de diferentes tipos

! Paramtrico
! classes podem assumir tipos a partir da instanciao de um esquema genrico ! Java ! instanciao atravs da transformao de um programa genrico original em um programa especfico similar
! elementos genricos so substitudos pelos tipos especficos fornecidos

Polimorfismo e Ligao Dinmica


! Mtodos tambm so elementos polimrficos ! Polimorfismo ocorre quando existe vrias verses de um mesmo mtodo
! mesmo nome e possuem listas de parmetros diferentes

! Este tipo de polimorfismo chamado de sobrecarga (overloading) e muito utilizado em programas orientados a objetos.

Polimorfismo e Ligao Dinmica


! A herana de tipo tambm oferece ...
! possibilidade de um mtodo definido por uma classe ser refinado/redefinido (sobescrito) pelas subclasses.

! Exemplo:
! um mtodo m de um objeto z invocado, pode existir uma srie de verses de m compatveis. ! a seleo de qual implementao ser utilizada determinada atravs do tipo do objeto que recebeu a mensagem.

Polimorfismo e Ligao Dinmica

class A {" !int a = 0; ! !void f(){ g(); } ! !void g(){ a=1; } ! } ! ! class B extending A { ! !int b = 0; ! !void g(){ b=2; } ! } !

Polimorfismo e Ligao Dinmica


! Este recurso denominado ligao dinmica
! um mecanismo central do paradigma orientado a objetos.

! Ligao dinmica permite ...


! a coexistncia de compatibilidade de subtipos e abstraes.

! No exemplo anterior ...


! importante observar que o objeto passa a ser um parmetro fundamental durante a invocao de um mtodo. ! a partir do tipo do objeto que determinado qual verso do mtodo que ser invocado, e no necessariamente do nome atual do tipo associado ao objeto.

Herana de Implementao
! Uma subclasse pode redefinir os mtodos da sua superclasse. ! Mas ...
! quando os mtodos da superclasse no so redefinidos, a subclasse simplesmente herda-os da superclasse.

! Herana caracterizada como um mecanismo que permite tambm a definio de novos objetos a partir do reuso de outros objetos pr-existentes.

Herana Tipo x Implementao


! Diferenas entre herana de implementao e subtipo.
! subtipo representa uma relao entre duas ou mais interfaces, o que permite o reuso da definio de um tipo. ! herana de implementao esta relacionado a possiblidade de reuso da implementao oferecida por uma classe.

! So dois mecanismos independentes ...


! mesmo que, em certas linguagens esto sintaticamente associados. ! C++ e Java possuem construes que podem simultaneamente introduzir as duas relaes entre duas classes.

Herana Simples e Herana Mltipla


! Em algumas linguagens ...
! uma classe somente pode herdar de uma nica superclasse ! outras, porm, permitem que uma classe herde mtodos de mais de uma superclasse imediata

! Poucas linguagens oferecem o recurso de herana mltipla


! apresenta uma srie de problemas que no possui solues elegantes

Herana Simples e Herana Mltipla


! O problema fundamental a coliso de nomes.
! inicialmente tem-se uma coliso quando uma class C simultaneamente herda de A e B, e ambas as classes possuem mtodos com a mesma assinatura

! possvel resolver este problema de trs maneiras:


! proibir sintaticamente a coliso de nomes ! requerer que toda coliso seja resolvida pelo programador, por exemplo, qualificando apropriadamente toda referencia para um nome que est em conflito ! determinar uma conveno para resoluo dos conflitos, como por exemplo, favorecer as classes que aprecem nas primeiras posies da lista de clausulas do extends

CO023 - Programao Orientada a Objetos


Introduo a Programao Orientada a Objetos
Prof. Elder Jos Reioli Cirilo elder@ufsj.edu.br