POO-PROGRAMACAO
ORIENTADA A OBJETOS
Prof: Manfrine Tapiramutá
CONCEITOS DE LINGUAGENS DE
PROGRAMAÇÃO
Linguagem de programação Conjunto de
comandos(escritos ou visuais) e regras usados para dar instruções ao computador.
Comandos Escritos: Linguagens Textuais
Basic, Cobol, Pascal,...
Comandos Visuais: Linguagens Orientada a Eventos
Delphi, Visual Basic,...
Não confundir com Linguagem Orientada a Objetos
Componentes visuais(botões,...) respondem a eventos(click do mouse,...)
Programa Seqüência ordenada de comandos
OBJETO
é uma entidade do mundo real que tem
uma identidade.
Objetos podem representar entidades
concretas ou entidades conceituais.
A estrutura de um objeto é representada em
termos de atributos.
O comportamento de um objeto é
representado pelo conjunto
de operações que podem ser executadas sobre o objeto.
CONCEITO POO
A POO foi criada para tentar aproximar o
mundo real do mundo virtual: a idéia fundamental é tentar simular o mundo real dentro do computador. Para isso, nada mais natural do que utilizar Objetos, afinal, nosso mundo é composto de objetos.
A programação orientada a objetos tem como
principais objetivos reduzir a complexidade no desenvolvimento de software e aumentar sua produtividade.
A programação orientada a objetos não tem a
intenção de substituir a programação estruturada tradicional
POO
Podemos considerar que a programação OO
é uma evolução de práticas que são recomendadas na programação estruturada, mas não formalizadas, como o uso de variáveis locais e globais.
A grande dificuldade para compreender a
programação OO é a diferença de abordagem do problema..
POO X PE
Enquanto a programação estruturada tem como
principal foco as ações (procedimentos e funções), a programação OO se preocupa com os objetos e seus relacionamentos.
Além do conceito de objeto, a programação OO
tem como alicerces os conceitos de:
Mensagem Classe Abstração Encapsulamento Herança Polimorfismo
POO X PE
Programação orientada a objetos Métodos Instancias e Variáveis Mensagens Classes Herança Polimorfismo Programação Estrutura Procedimentos e Funções Variáveis Chamada a procedimentos e funçõesTipos de dados definidos pelo usuario
---PROGRAMAÇÃO PROCEDURAL OU IMPERATIVA
Estilo convencional de programação
Programas são decompostos em passos de
computação que realizam operações complexas
Rotinas são utilizadas como módulos para definir
cada passo da computação
PROGRAMAÇÃO ORIENTADA A OBJETOS
Ênfase na definição de classes e objetos Instâncias de classes são criadas de acordo com
a necessidade durante a execução de um programa
Baseado na definição de hierarquias de classes e
seleção em tempo-real de unidades a executar
Smalltalk, Eiffel, Java C++, Ada
PROGRAMA ESCRITO EM UMA LING.
ESTRUTURADA
Principal Característica: compartimentalização do código e dados. Linguagens procedimentais Esconde das outras funções as tarefas
desempenhadas por uma função específica.
Redução da complexidade Reaproveitamento do código Equipe de trabalho
Grande avanço em relação às
linguagens não estruturadas, pois o programador possui maior controle do fluxo de execução. Função Principal Função Principal Função A Função A Função B Função B
EXEMPLO DE UM PROGRAMA
EM LINGUAGEM C
Variáveis Locais Reduz quantidade de variáveis globais Visibilidade das variáveis # include <stdio.h> int soma( int a, int b); int res, n1, n2; main ( ) { scanf(“%d%d”,&n1,&n2); res = soma (n1, n2 ); printf(“A soma de %d e %d é: %d”,n1, n2, res); }int soma (int a, int b ) {
return a +b; }
EVOLUÇÃO DAS LINGUAGENS
DE PROGRAMAÇÃO
Lisp: Linguagem que segue o paradigma funcional. Composta por funções para processamento de listas. Aplicações de IA. C/C++: C é um sub-conjunto de C++. C++ é orientado a
objeto, ainda que não totalmente ou com falhas.
FORTRAN LISP 195 7 195 8 196 0 196 9 197 0 198 0 198 5 199 5 COBOL C C+ JAVA + SMALLTALK ALAN KAY XEROX PASCA L
POR QUE USAR OO
Um programa de computador sempre busca representar uma dada realidade (mundo real ou modelo abstrato: matemático)
Traduzir o modelo real em modelo computacional é o grande problema. Esta tarefa só é realizada de forma eficiente com o uso de métodos rígidos de modelagem.
A OO tenta simular objetos do mundo real em objetos computacionais, tornando a tarefa de modelagem e programação mais simples.
A Orientação a Objetos busca modelar um ambiente utilizando-se dos próprios elementos presentes neste ambiente, ou seja, os objetos.
POR QUE USAR OO
Vantagens
Existem muitas ferramentas de apoio ao desenvolvimento de programas;
Os programas têm uma estrutura altamente modular, o que permite um mais fácil controle e expansão dos mesmos. Por exemplo, basta alterar as características de um objeto "mãe" para que todos os objetos "filhos" (que herdaram propriedades) sejam também automaticamente alterados de forma correspondente; A programação orientada a objeto se baseia
fortemente na própria forma de pensar humana, ao contrário da forma algorítmica e procedural da programação convencional.
POR QUE USAR OO
aumento de produtividade
reuso de código
redução das linhas de código
programadas
separação de responsabilidades
maior flexibilidade do sistema
facilidade na manutenção, dentre
POR QUE NÃO USAR OO
Desvantagens:
grande necessidade de memória;
grande complexidade de gerenciamento
interno das estruturas dos objetos, o que implica em velocidade de execução menor.
difícil otimização de tempo de execução dos
programas. A otimização de programas freqüentemente requer uma violação das próprias regras de programação orientada a objeto.
CLASSES
No mundo real freqüentemente percebemos vários objetos de
um mesmo tipo. Por exemplo: seu carro é um dos muitos carros existentes no mundo.
Usando a terminologia OO, dizemos que um carro em particular
é uma instância da classe de objetos conhecida como carros.
Os carros, em geral, possuem estado (cor, potência do motor,
combustível) e comportamento (ligar, acelerar, brecar, mudar marcha) em comum.
O estado de cada carro é independente e pode ser diferente do
estado dos outros carros. Cada carro pode ter uma cor diferentes, por exemplo.
Na Orientação a Objetos também é possível ter vários objetos
Tirando vantagem dessa semelhança entre alguns
objetos, também é possível criar modelos para esses objetos. Esse modelo é chamado de
CLASSE. As classes são tipos que podem ser criados.
Por definição: Uma classe é um modelo (protótipo)
que define as variáveis (estado) e os métodos (comportamento) comuns a todos os objetos do mesmo tipo.
POO
É a descrição de um grupo de objetos com
propriedades similares (atributos), comportamento comum(operações) , relacionamentos com outros objetos e semânticas idênticas.
Todo objeto é instância de uma classe. Enquanto um objeto individual é uma
entidade concreta que executa algum papel no sistema, uma classe captura a estrutura e comportamento comum a todos os objetos que estão relacionados.
POO
A definição da classe consiste na definição
dos atributos e operações dos objetos desta classe;
Um atributo é uma característica de uma
classe.
Atributos não apresentam comportamento,
eles definem a estrutura da classe;
Operações caracterizam o comportamento
de um objeto, e são o único meio de acessar, manipular e modificar os atributos de um
POO
Uma classe define a estrutura e o
comportamento de qualquer objeto da classe, atuando como um padrão para a construção de objetos.
INSTÂNCIA DE OBJETOS
Em informática, devido a importação do
idioma inglês, instância é usada com o sentido de exemplar.
No contexto da orientação ao objeto,
instância significa a concretização de uma classe.
Em termos intuitivos, mas aproximados, uma
classe é vista como um "molde" que gera instâncias de um certo tipo, já objeto é algo que existe fisicamente moldado a partir
desse molde.
HERANÇA
Mecanismo que permite definir uma nova
classe (subclasse) a partir de uma classe já existente (superclasse)
Ao se estabelecer uma Especialização
(subclasse) de uma classe, a subclasse
herda todas as propriedades (métodos e atributos) da superclasse.
A subclasse pode adicionar novos métodos, como também reescrever métodos herdados
Habilidade de um objeto derivar seus atributos
(dados) e métodos (funcionalidade) automaticamente de outro objeto
GENERALIZAÇÃO E
ESPECIALIZAÇÃO
É um conceito poderoso que define uma hierarquia de classes, possibilitando o compartilhamento de semelhanças entre estas classes enquanto suas diferenças são preservadas nas classes especializadas.
Pode-se dizer que generalização e especialização são dois lados da mesma moeda.
Utiliza-se o conceito de especialização quando se deriva uma determinada classe em uma nova classe mais específica ou especializada. A nova classe, denominada subclasse, herdará da classe original, denominada superclasse, os seus atributos e parte ou totalidade de suas operações, e a estes adicionará os atributos e operações que a especifica.
Por outro lado, utiliza-se o conceito de
generalização sempre que parte-se de classes que possuem características comuns, condensa-se tais características em uma nova classe de nível mais alto, superclasse, e faz-se com que as primeiras herdem da nova classe os atributos e operações que lhes eram comuns.
O relacionamento de herança é quem
materializa o conceito de
Generalização/Especialização.
A Herança materializa o conceito OO do “é
GENERALIZAÇÃO/ESPECIALIZAÇÃO
Mamífero GENERALIZAÇÃO ESPECIALIZAÇÃO (herança) CATEGORIA CATEGORIA Baleia Atributos •sangue quente •vertebrado •vivíparo Atributos •Habitat: mar •Tempo médio de vida: 200 anosGENERALIZAÇÃO/ESPECIALIZAÇÃO
CATEGORIA
CATEGORIA
Relação É um
Pessoa
HERANÇA
SuperClasse Atributo 1 Atributo 2 Serviço 1 Serviço 2 Subclasse Atributo 1 Atributo 2 Serviço 1 Serviço 2 Subclasse Atributo 1 Atributo 2 Serviço 1 Serviço 2 Herança não afeta a Superclass e Proprieda des Podem ser redefinida s Serviço 1 Serviço 2 Novas Proprieda des Podem ser criadas Serviço 1 Serviço 2 Serviço 3MENSAGENS
Mensagens possibilitam a interação entre os
objetos.
Requisição para a ativação de um método. Uma mensagem contém:
◦ nome do método;
◦ argumentos do método.
A resposta a uma mensagem é o resultado
Um objeto por si só não significa muito em
um sistema. Para ter algum sentido e valor esses objetos precisam interagir e
comunicar-se entre si.
Os objetos se comunicam por meio de
mensagens.
Enviar uma mensagem significa executar um
MÉTODOS OU MENSAGENS II
Objetos de software interagem e se comunicam uns com os outros através do envio de mensagem
Quando um objeto A quer que o objeto B faça uma ação, o objeto A envia uma mensagem ao objeto B
“A pede para B fazer Ação” = “A pede para B executar Método X”
Objeto A Objeto B
MÉTODOS OU MENSAGENS III
Três componentes compreendem uma mensagem: o objeto para o qual a mensagem é enviada
o nome do método a ser executado
parâmetros necessários para execução do método
“A pede para B fazer Ação” = “Você pede para a Bicicleta
Passar_Marcha(marchaAnterior)”
pessoa Bicicleta
VISIBILIDADE DE MÉTODOS E
ATRIBUTOS
Private -> Os itens declarados nesse nível só
podem ser acessados na mesma classe.
Public -> Nesse nível, qualquer classe poderá
acessar o item.
Protected -> Os itens só poderão ser
acessados em outra classe se for em uma classe descendente.
Published -> É o nível default, igual ao
Public, mas define propriedades e eventos usados em tempo de projeto.
VISIBILIDADE DE ATRIBUTOS
E MÉTODOS
O escopo ou visibilidade é utilizado para
definir o tipo de acesso que terá determinado método, atributo, classe ou objeto uma parte ficará totalmente escondida e restrita, e a
outra servirá apenas ao pacote de classes que a classe que o definiu pertence, e a última parte tem seu acesso totalmente liberado para qualquer classe.
ATRIBUTOS E MÉTODOS PÚBLICOS
(+)
São os atributos e métodos dos objetos que
podem ser visíveis externamente, ou seja,
outros objetos poderão acessar os atributos e métodos destes objetos sem restrições.
Qualquer classe, de qualquer pacote, tem acesso a eles.
ATRIBUTOS E MÉTODOS PRIVADOS
(-)
São os atributos e métodos que só podem
ser acessados por operações internas aos próprios objetos
ATRIBUTOS E MÉTODOS
PROTEGIDOS (#)
São similares à classificação do
privado,porém, ao contrário dele, a
acessibilidade é transmitida às subclasses por herança (espécie de relacionamento entre classes).
ABSTRAÇÃO
Abstração consiste de focalizar nos aspectos
essenciais inerentes a uma entidade e ignorar propriedades “acidentais”.
Em termos de desenvolvimento de sistemas, isto
significa concentrar-se no que um objeto é e faz antes de se decidir como ele será implementado.
O uso de abstração preserva a liberdade para
tomar decisões de desenvolvimento ou de
implementação apenas quando há um melhor entendimento do problema a ser resolvido
ABSTRAÇÃO
Muitas linguagens de programação modernas
suportam o conceito de abstração de dados; porém, o uso de abstração juntamente com polimorfismo e herança, como suportado em orientação a objetos, é um mecanismo muito mais poderoso.
O uso apropriado de abstração permite que
um mesmo modelo conceitual (orientação a objetos) seja utilizado para todas as fases de desenvolvimento de um sistema, desde sua análise até sua documentação.
ESPAÇO DE PROBLEMAS ESPAÇO DE SOLUÇÕES Mundo Real Mundo Computacional Mapeamen to Processo de Identificação de Abstrações
Se essas abstrações não tiverem uma expressão direta (ou próxima)
do mundo computacional, a complexidade da solução será aumentada
ABSTRAÇÃO
Abstração o processo através qual detalhes são ignorados, para nos concentrarmos nas características essenciais
Concentra-se no que o objeto é e faz e não em como será implementado
Permite representar uma realidade complexaem termos de um modelo simplificado
Mecanismo utilizado na análise de um domínio.
Através dela, o indivíduo observa a realidade e dela
abstrai
entidades, ações, etc. consideradas essenciais para uma
aplicação, excluindo todos os aspectos julgados irrelevantes
IMPORTÂNCIA DA ABSTRAÇÃO
O conceito de abstração é importante para a análise de sistemas, pois só iremos representar nos sistemas que vamos criar, aquelas características que nos interessam dos objetos reais
Exemplo:
– Ao modelarmos um objeto avião no contexto de um sistema de marcação de passagens aéreas, não vai nos interessar a característica número de turbinas do avião, mas irá nos interessar a
CLASSES ABSTRATAS
Conceito
Geralmente quando criamos uma classe o
fazemos para um determinado propósito e não pensamos previamente que a classe poderá ser herdada por outra classe. Agir desta forma é
seguir o caminho natural das coisas: criamos uma classe e a usamos e pronto.
Ocorre que existem ocasiões nas quais criamos
uma classe que devemos usar mas já
percebemos que no futuro outras classes
poderão herdar da classe que estamos criando. Neste caso já temos a herança em mente.
ENCAPSULAMENTO
Definição:
– Mecanismo que coloca juntos o código (métodos) e
os dados (atributos), mantendoos controlados em
relação ao seu nível de acesso.
– O conceito de encapsulamento está intimamente
ligado ao conceito de ocultamento da informação
ENCAPSULAMENTO
Objetivo:
– Controlar o acesso de atributos e métodos de um objeto, através de uma interface bem
definida. Benefícios:
– Manutenção de software; – Evolução de software;
ENCAPSULAMENTO
Exemplo:
– Motor de um automóvel.
– O motorista não precisa ter conhecimento técnico de como funciona cada parte do motor, mas apenas saber qual é a sua finalidade e como usá-lo.
VANTAGENS
Proteger os atributos do objeto quanto à
manipulação por outros objetos (proteção contra acesso não autorizado,valores
inconsistentes, entre outras possibilidades).
Esconder a estrutura interna do objeto de
modo que a interação com este objeto seja relativamente simples e, à medida do
possível, siga um padrão de desenvolvimento que facilite o entendimento dos
TIPOS DE VISIBILIDADE
PUBLIC - para definir acesso a métodos públicos Que fazem parte da interface ao objeto para quem vai
chamá-lo
Não usa para atributos
PRIVATE - para acesso estritamente privado ao
objeto (na realidade à classe)
PROTECTED para definir acesso a métodos ou
atributos que devem ficar disponíveis para quem estende a classe (acessível a subclasses)
C o p y le ft2 0 1 0 – P ro f: R ilm a r G o m e s< ril m a rg o m e s@ h o tm a il. co m >
INTERFACES
É uma fronteira que define a comunicação
entre duas entidades
“Liga” duas entidades diferentes sem uma
conhecer os detalhes da outra
Um “plug” de ligação entre duas entidades
Em Java serve como uma maneira de simular
herança múltipla :
Uma classe pode implementar mais de uma interface
Apenas um “contrato” do comportamento
esperado
Classes implementam interfaces utilizando a
palavra chave implements
C o p y le ft2 0 1 0 – P ro f: R ilm a r G o m e s< ril m a rg o m e s@ h o tm a il. co m >
EXEMPLO DE UM INTERFACE
A interface abaixo define o comportamento
de um player
public interface Player { public void play();
public void stop(); public void pause(); } C o p y le ft2 0 1 0 – P ro f: R ilm a r G o m e s< ril m a rg o m e s@ h o tm a il. co m >
public class HomeTheater implements Player {
public void play() {
System.out.println("Este é o método PLAY do home theater");
}
public void stop() {
System.out.println("Este é o método STOP do home theater");
}
public void pause() {
System.out.println("Este é o método PAUSE do home theater"); } } C o p y le ft2 0 1 0 – P ro f: R ilm a r G o m e s< ril m a rg o m e s@ h o tm a il. co m >