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
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
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
Elementos OO - Classe
! Instanciao ...
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
! Suponha dois tipos (classes) T e S onde ...
! classe T um subtipo da classe S
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
Herana de Tipo
! Caracterstica fundamental da herana
! possibilidade da subclasse modificar a definio de um membro presente na superclasse
! 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.
! 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
! Este tipo de polimorfismo chamado de sobrecarga (overloading) e muito utilizado em programas orientados a objetos.
! 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.
class A {" !int a = 0; ! !void f(){ g(); } ! !void g(){ a=1; } ! } ! ! class B extending A { ! !int b = 0; ! !void g(){ b=2; } ! } !
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.