Programação Orientada a Objetos · 2015. 8. 17. · Objetos e Interfaces . 17/08/2015 20/42 ....
Transcript of Programação Orientada a Objetos · 2015. 8. 17. · Objetos e Interfaces . 17/08/2015 20/42 ....
Renato Dourado Maia
Universidade Estadual de Montes Claros
Engenharia de Sistemas
Modelagem Orientada a Objetos
Programação Orientada a Objetos
Renato Dourado Maia – Programação Orientada a Objetos
Na Unidade I – Gerenciando a Complexidade, vi-mos:
Um sistema de software é inerentemente complexo e muitas vezes ultrapassa a capacidade intelectual huma-na.
Sistemas complexos podem ser analisados a partir de sua decomposição em coisas, os objetos, que têm esta-do e comportamentos próprios.
A complexidade da decomposição pode ser organizada na forma de uma hierarquia com duas relações básicas: “é um tipo de” e “é parte de”.
Os sistemas complexos geralmente evoluem a partir de formas estáveis mais simples.
Lembrando
17/08/2015 2/42
Renato Dourado Maia – Programação Orientada a Objetos
Na Unidade II – Modelagem Orientada a Objetos, veremos:
Como utilizar a metodologia OO para organizar a com-plexidade de sistemas de software.
Quais os principais mecanismos que poderão ser utiliza-dos para isso.
Uma introdução à análise e ao projeto orientado a obje-tos.
Unidade II
17/08/2015 3/42
Renato Dourado Maia – Programação Orientada a Objetos
Unidade II – Modelagem Orientada a Objetos:
A Evolução dos modelos orientados a objetos. A abstração de objetos: encapsulamento, interface e im-
plementação. Reutilizando a implementação. Reutilizando a interface por intermédio de herança. Objetos intercambiáveis: polimorfismo. Introdução à Análise e ao Projeto Orientado a Objetos u-
tilizando a UML (Unified Modeling Language).
Unidade II
17/08/2015 4/42
Renato Dourado Maia – Programação Orientada a Objetos
A análise e o projeto orientados a objetos consti-tuem uma metodologia que nos leva a uma de-composição orientada a objetos de um sistema.
Os modelos resultantes serão centrados nos ob-jetos (coisas/entidades) que compõem o sistema.
A análise OO é bastante diferente da análise es-truturada, que é centrada nos procedimentos.
Modelos OO – Evolução
17/08/2015 5/42
Renato Dourado Maia – Programação Orientada a Objetos
Vários tipos de modelos, cada um capturando as-pectos distintos do sistema, poderão ser criados:
Modelo Lógico: estrutura de classes e objetos. Modelo físico: módulos e processos.
Modelos OO – Evolução
Os modelos OO surgiram como consequência da própria evolução das linguagens de programação...
17/08/2015 6/42
Renato Dourado Maia – Programação Orientada a Objetos
O processo de abstração também evoluiu!
Lembrando:
Abstrair consiste no processo de retirar do domínio do problema os detalhes relevantes e representá-los não mais na linguagem do domínio, e sim na linguagem da solução.
Modelos OO – Evolução
17/08/2015 7/42
Renato Dourado Maia – Programação Orientada a Objetos
No contexto da engenharia, abstrair corresponde a criar modelos que serão utilizados para a reso-lução do problema.
Modelos OO – Evolução
Problema
Modelo ABSTRAÇÃO
17/08/2015 8/42
Renato Dourado Maia – Programação Orientada a Objetos
Modelos OO – Evolução Diferentes Abstrações
17/08/2015 9/42
Renato Dourado Maia – Programação Orientada a Objetos
O processo de abstração também evoluiu:
Todas as linguagens de programação fornecem meios para a criação de abstrações.
A linguagem Assembly é uma pequena abstração da má-quina na qual os programas são executados.
Linguagens imperativas, como BASIC, FORTRAN e C, são abstrações da linguagem Assembly: Nessas linguagens, é necessário pensar em termos da estrutura do
computador, ao invés de se pensar em termos da estrutura do problema a ser resolvido!
Modelos OO – Evolução
17/08/2015 10/42
Renato Dourado Maia – Programação Orientada a Objetos
O processo de abstração também evoluiu:
O programador deve estabelecer uma associação entre o modelo da máquina (no espaço da solução) e o modelo do problema que está sendo resolvido (no espaço do problema).
O esforço para fazer esse mapeamento pode ser gran-de...
Modelos OO – Evolução
17/08/2015 11/42
Renato Dourado Maia – Programação Orientada a Objetos
O processo de abstração também evoluiu:
A programação orientada a objetos tenta trazer o espa-ço da solução para o espaço do problema: ambos são representados como objetos!
O programa permite adaptação ao problema por meio da adição de novos tipos ao espaço da solução que ma-peiam os tipos existentes no espaço do problema: des-creve-se o problema em termos do problema e não em termos da solução!
Modelos OO – Evolução
Vocês conseguem perceber como isso é fantástico?
17/08/2015 12/42
Renato Dourado Maia – Programação Orientada a Objetos
O processo de abstração também evoluiu:
Cada objeto funciona como uma pequena parte do pro-blema, possuindo seu estado e suas operações, o que é semelhante ao que acontece com os objetos do mundo real, que possuem características e comportamentos.
Modelos OO – Evolução
O “mundo computacional” se aproxima mais do “mundo real”...
17/08/2015 13/42
Renato Dourado Maia – Programação Orientada a Objetos
A Abstração de Objetos
O que são objetos?
17/08/2015 14/42
Renato Dourado Maia – Programação Orientada a Objetos
Um objeto é uma variável, e armazena dados...
Então, uma struct é um objeto?
Sim, uma struct é um objeto. Entretanto, um objeto é mais abrangente do que uma
struct: pode-se pedir que determinadas operações se-jam realizadas sobre os objetos.
Assim, um objeto possui atributos, que são os dados, e comportamentos, que são os métodos, procedimentos ou funções que atuam sobre ele.
A Abstração de Objetos
Exemplos de objetos: pessoas, carros, empresas, etc..
17/08/2015 15/42
Renato Dourado Maia – Programação Orientada a Objetos
A Abstração de Objetos
Programação Estruturada Programação Orientada a Objetos
Dados Atributos (Dados)
Funções Métodos
(Funções)
Objeto
17/08/2015 16/42
Renato Dourado Maia – Programação Orientada a Objetos
A Abstração de Objetos
O QUE É UM PROGRAMA EM LINGUAGEM OO?
17/08/2015 17/42
Renato Dourado Maia – Programação Orientada a Objetos
Um programa em linguagem OO é um conjunto de objetos dizendo uns para os outros o que fa-zer por meio do envio de mensagens...
As mensagens, na verdade, podem ser enxerga-das como chamadas a funções que pertencem a um objeto específico.
Cada objeto tem sua própria região de memória, que pode, inclusive, ser composta por outros ob-jetos, e tem um tipo, isto é, pertence a uma clas-se.
A Abstração de Objetos
17/08/2015 18/42
Renato Dourado Maia – Programação Orientada a Objetos
Os objetos, apesar de únicos, fazem parte de uma classe de objetos, possuindo, portanto, ca-racterísticas comuns.
A criação de tipos abstratos de dados, as classes, constitui um conceito fundamental da programa-ção OO:
Tipos de dados abstratos funcionam de maneira similar aos tipos fundamentais:
Podem ser criadas variáveis do tipo: objetos/instâncias. As variáveis podem ser manipuladas.
Objetos e Interfaces
17/08/2015 19/42
Renato Dourado Maia – Programação Orientada a Objetos
Os objetos de cada classe possuem algumas coi-sas em comum:
Toda conta possui um extrato, todo caixa pode aceitar um depósito...
Todo objeto tem seu próprio estado:
Cada conta tem um extrato diferente, cada caixa tem o seu nome...
Assim, caixas, clientes, contas, transações po-dem, cada um, ser representados por uma única entidade no programa, o objeto.
Objetos e Interfaces
17/08/2015 20/42
Renato Dourado Maia – Programação Orientada a Objetos
Objetos e Interfaces
Cada objeto pertence a uma classe, que define o seu comportamento
e as suas características.
17/08/2015 21/42
Renato Dourado Maia – Programação Orientada a Objetos
Classes
17/08/2015 22/42
Renato Dourado Maia – Programação Orientada a Objetos
Depois que uma classe é criada, podem ser cria-dos tantos objetos da classe quanto necessários, que podem ser manipulados como se fossem ele-mentos existentes no problema que está sendo solucionado.
Objetos e Interfaces
Mas como fazer um objeto realizar um trabalho útil?
17/08/2015 23/42
Renato Dourado Maia – Programação Orientada a Objetos
Cada objeto possui métodos (funções) para de-sempenhar suas atividades.
Cada objeto somente pode responder a determi-nadas requisições.
O conjunto de métodos de um objeto é conhecido como sua interface.
Objetos e Interfaces
17/08/2015 24/42
Renato Dourado Maia – Programação Orientada a Objetos
Objetos e Interfaces Lâmpada
Lampada
liga(); desliga(); aumenta_luminosidade(); diminui_luminosidade();
Nome da classe
Interface
UML
Instanciando um objeto e chamando um método:
Lampada Luz; Luz.liga();
17/08/2015 25/42
Renato Dourado Maia – Programação Orientada a Objetos
Que métodos (funções) podem ser chamados?
Isso é a interface!
Onde esses métodos estão codificados, como são implementados?
Isso é a implementação! Geralmente não interessa a quem utiliza o objeto conhe-
cer os detalhes da implementação...
Objetos e Interfaces
17/08/2015 26/42
Renato Dourado Maia – Programação Orientada a Objetos
Um objeto pode ser encarado como um servidor, programado pelo criador da classe.
O cliente do objeto utiliza os métodos por meio de sua interface.
O criador da classe expõe o mínimo da interface para o cliente, escondendo o resto. Por quê?
Porque se está escondido, pode ser mudado sem que o programa do cliente seja quebrado.
Se fosse dado total acesso à implementação interna, o cliente poderia quebrar a integridade do objeto.
Interface, Implementação e Encapsulamento
17/08/2015 27/42
Renato Dourado Maia – Programação Orientada a Objetos
A estratégia utilizada para garantir que determi-nadas partes de uma classe não possam ser a-cessadas pelo “público em geral” é chamada con-trole de acesso...
A interface não apresenta necessariamente todos os métodos de um objeto, mas apenas aqueles que podem ser acessados pelo “público em ge-ral”, os métodos públicos.
Os métodos internos aos objetos são os métodos privados.
Encapsulamento
17/08/2015 28/42
Renato Dourado Maia – Programação Orientada a Objetos
Encapsulamento Videocassete público: Play(); FastForward(); Rewind(); Record(); ... privado: PosicionaCabecaGravacao(posicao); GiraMotor(velocidade); ...
Público x
Privado
17/08/2015 29/42
Renato Dourado Maia – Programação Orientada a Objetos
Encapsulamento
17/08/2015 30/42
Renato Dourado Maia – Programação Orientada a Objetos
Uma vez que uma classe foi criada e testada, ela pode ser utilizada para auxiliar na implementação de outras classes.
Reutilizando a Implementação
Essa é uma das principais vantagens da Programação Orientada a Objetos.
17/08/2015 31/42
Renato Dourado Maia – Programação Orientada a Objetos
A forma mais simples de reutilização é utilizar um objeto daquela classe diretamente.
Exemplos: janela no Windows, matriz em um programa de cálculo, etc ...
Pode-se, também, utilizar um objeto de uma classe dentro de uma nova classe:
Sua classe pode ser composta pelo número e tipo de ob-jetos que se fizerem necessários!
Reutilizando a Implementação
Composição
17/08/2015 32/42
Renato Dourado Maia – Programação Orientada a Objetos
Reutilizando a Implementação
UTILIZAR UM OBJETO DE UMA CLASSE DENTRO DE
UMA NOVA CLASSE
UTILIZAR O OBJETO DA CLASSE DIRETAMETE
COMPOSIÇÃO
VERBOS ASSOCIADOS: CONTER, POSSUIR
UM CARRO CONTÉM 4 RODAS, UM MOTOR, UMA
LATARIA...
REUTILIZAÇÃO
17/08/2015 33/42
Renato Dourado Maia – Programação Orientada a Objetos
Reutilizando a Implementação Composição – Notação UML
Roda Motor
Carro
4 1
Lataria
1114 CabecaDeGravacao
Motor CabecaDeLeitura
Videocassete
ControleDeMotor
17/08/2015 34/42
Renato Dourado Maia – Programação Orientada a Objetos
A herança permite a criação de uma hierarquia de classes: classes mais especializadas – as clas-ses filhas, herdam propriedades da classe mais geral – a classe pai.
Reutilizando a Interface – Herança
Cria-se uma nova classe programando-se apenas as diferenças entre a classe e a classe pai: a classe filha herda a interface da classe pai, podendo substituí-la
quando se espera um objeto da classe pai!!!
Pode-se compartilhar automaticamente métodos e dados entre diferentes classes, subclasses e objetos
EXPRESSÃO TÍPICA: É UM TIPO DE...
17/08/2015 35/42
Renato Dourado Maia – Programação Orientada a Objetos
Ave é um tipo de Animal. Mamífero é um tipo de Animal. Ave come, dorme, voa e botaOvo. Mamífero come, dorme e mama. Uma Ave, ou um Mamífero, podem
substituir um Animal, pois são tipos de Animal, e, portanto, possuem a mesma interface “base”!
Reutilizando a Interface – Herança
Que delícia crocante!!!
Herança – Exemplo 1
17/08/2015 36/42
Renato Dourado Maia – Programação Orientada a Objetos
Reutilizando a Interface – Herança Herança – Exemplo 2
Triangle, Square e Circle são tipos de Shape, possuem a mesma
interface “base”, e podem substituir Shape ...
17/08/2015 37/42
Renato Dourado Maia – Programação Orientada a Objetos
Cada tipo de Shape deve ter o seu próprio método draw, pois cada uma se desenha de modo diferente!
Os métodos podem ser sobrescritos nas classes derivadas!
Deseja-se utilizar a mesma interfa-ce, mas com um comportamento um pouco diferente para a classe deri-vada.
Reutilizando a Interface – Herança Herança – Exemplo 2
Que delícia crocante de novo!!!
17/08/2015 38/42
Renato Dourado Maia – Programação Orientada a Objetos
Quando trabalhamos com hierarquias, em muitas vezes queremos tratar um objeto não por seu ti-po específico, mas por seu tipo base: isso permi-te escrever código que não depende do tipo es-pecífico e, consequentemente, a adição de novos tipos sem maiores dificuldades:
Por exemplo, no caso das Shapes, poderíamos escrever código genérico que as manipulasse, mandando-as se desenharem, por exemplo, sem nos preocuparmos se são triângulos, círculos ou qualquer outra coisa ...
Objetos Intercambiáveis: Polimorfismo
Adicionar novos tipos é uma das formas mais comuns de estender um programa orientado a objetos para tratar novas situações!
17/08/2015 39/42
Renato Dourado Maia – Programação Orientada a Objetos
Isso é o polimorfismo – “o que possui várias for-mas”:
Propriedade de se utilizar o mesmo nome para métodos diferentes, implementados em diferentes níveis de uma hierarquia de classes.
Para cada classe, tem-se um comportamento específico para o método.
Objetos Intercambiáveis – Polimorfismo
17/08/2015 40/42
Renato Dourado Maia – Programação Orientada a Objetos
Mensagem Final
Não se preocupem demais, no momento atual, com os conceitos:
tudo ficará claro depois!
17/08/2015 41/42
Renato Dourado Maia – Programação Orientada a Objetos
Esta apresentação é uma adaptação do material originalmente desenvolvido pelo professor Renato Cardoso Mesquita, do Departamento de Engenha-ria Elétrica da Universidade Federal de Minas Ge-rais.
Importante
http://www.cpdee.ufmg.br/~renato/
17/08/2015 42/42