Escolar Documentos
Profissional Documentos
Cultura Documentos
(e Análise)
Orientada a Objetos
Conceitos gerais de Orientação a Objetos (OO)
Engenharia de Aplicações em Redes – Introcução 1
O duelo homem x máquina
● “The genesis of the computer revolution was in a machine.
The genesis of our programming languages thus tends to
look like that machine.”
– Computadores não são apenas máquinas, mas ferramentas de
amplificação da mente.
– As ferramentas deveriam se parecer menos com a máquina e
mais com nossas mentes.
● Redução do “gap semântico” entre as abstrações e a implementação
● Abstrações básicas: algoritmos e tipos abstratos de dados
Engenharia de Aplicações em Redes – Introcução 2
Uma pequena história das abstrações
● Abstrações são os recursos dos programadores para melhor
gerenciar a complexidade dos programas
● A abstração básica que nos interessa são os
Tipos Abstratos de Dados (TADs)
● As soluções para se implementar TADs têm evoluído com o tempo:
– tipos compostos, funções e procedimentos;
– módulos;
– classes/objetos.
● Essa evolução tem seu paralelo nos padrões de programação
Engenharia de Aplicações em Redes – Introcução 3
O que é
Programação Orientada a Objetos?
● Um paradigma avançado de programação que
– engloba um conjunto de teorias, padrões e métodos que juntos
representam uma forma de organizar conhecimento
– baseado no conjunto de abstrações de classes e objetos
– empacota dados e procedimentos em um mesmo elemento (objeto)
● Objetos se comunicam pela passagem de mensagens
● Comportamentos e informações podem ser definidos em função de
um tipo (classe) ou diretamente a partir de outros objetos
Engenharia de Aplicações em Redes – Introcução 4
Diretivas gerais de POO
● Organizar o sistema de software em termos dos elementos que o
mesmo manipula
– em vez de perguntar o que o sistema faz,
– perguntar sobre o quê o sistema age e quais são as interações
● Focar primeiro sobre os dados favorece a reusabilidade
Engenharia de Aplicações em Redes – Introcução 5
Mudança de paradigma
● Estamos mudando de metodologia de desenvolvimento:
● Topdown (refinamentos sucessivos)
– Define o sistema em função de suas ações básicas
– Todas as ações estruturadas em termos umas das outras
– Limita a reusabilidade
● Orientada a dados (objetos)
– Define o sistema em função dos dados que ele manipula
– Não necessariamente todas a ações em um só conjunto
– Reaproveitamento facilitado
Engenharia de Aplicações em Redes – Introcução 6
Mudança de paradigma
● Exemplo: serviço de automação de bolsa de valores
● Topdown:
– identifica função principal: coletar e exibir cotações de ações
– programa principal inicia a hierarquia de tarefas executadas
● Orientado a objetos:
– identifica elementos do problema: ações, corretores, fundos e seus
relacionamentos
– programa principal apenas cria objetos e dispara o processamento
Engenharia de Aplicações em Redes – Introcução 7
Classes e objetos
● Combinação de dados e operações sobre eles em um
elemento único
● Podem ser vistos com uma extensão dos conceitos de
Tipos Abstratos de Dados
● Classe: definição do tipo
● Objeto: cada instância derivada da classe
Engenharia de Aplicações em Redes – Introcução 8
Princípios da Orientação a Objetos
● Há alguns princípios básicos:
– Encapsulamento
– Proteção/ocultação da informação (information hiding)
– Passagem de mensagens
– Ligação tardia (late binding)
– Delegação
– Classes/objetos/instâncias
– Herança
– Polimorfismo
– Relacionamentos
Engenharia de Aplicações em Redes – Introcução 9
Encapsulamento
● Programação convencional separa dados e
procedimentos
Dados Procedimentos
● O objeto contém tanto os dados quanto a Serviços
descrição das operações que manipularão ou
alterarão aqueles dados
Dados
– Campos de dados: atributos
– Implementação das operações: métodos
Engenharia de Aplicações em Redes – Introcução 10
Proteção da informação (data hiding)
● O objeto que contém os dados (atributos do
objeto) define que serviços estão disponíveis Serviços
para outros objetos
● Outros objetos podem não ter acesso a Dados
dados individuais
● A informação sobre como os serviços são
implementados também pode ser protegida
Não é possível
chegar aos dados
Engenharia de Aplicações em Redes – Introcução diretamente 11
Proteção da informação (data hiding)
Engenharia de Aplicações em Redes – Introcução 12
Classe/Instância/Objeto
● Todo objeto é criado a partir (é uma instância) de uma classe
● Instâncias podem ser criadas em tempo de execução
● Dados (atributos) são associados a cada objeto
● Classes podem conter atributos gerais independentes das
diversas instâncias (atributos de classe)
Um objeto bem identifidado de uma Um objeto de uma
Uma classe com
classe determinada certa classe sem uma
atributos e métodos
identificação completa
Engenharia de Aplicações em Redes – Introcução 13
Passagem de mensagens
● Um objeto se comunica com outros pelo envio de mensagens
● Uma ação é iniciada por uma requisição de serviços (mensagem)
enviada para um objeto específico
● Essa ação é uma operação que utiliza ou altera os dados do objeto
● A implementação da ação é denominada método
– Relacionado ao conceito de funções da programação imperativa
Serviços Serviços
Mensagem
Dados Dados
Cliente
Engenharia de Aplicações em Redes – Introcução 14
Late binding (ligação tardia)
● Suporte à habilidade de determinar quem será o receptor de uma
mensagem (e o respectivo método invocado) apenas quando a
mensagem é realmente enviada em tempo de execução
Services
Services
Services
Serviços Services
Services
Data Serviços
? Data
Data
Dados Data
Data
Dados
Engenharia de Aplicações em Redes – Introcução 15
Delegação
● Trabalho é transferido, pelo envio de mensagens, de um objeto
(cliente) para outro (servidor)
– Da perspectiva do cliente o servidor é quem deve executar os serviços
que o cliente necessita.
– Trabalho é transferido continuamente até que atinja o objeto que possui
os dados e os métodos para executar a tarefa
Serviço
Dados
Serviço Serviço
Dados Dados
Engenharia de Aplicações em Redes – Introcução 16
Herança (Generalização/Especialização)
● Relação entre classes (tipos de objetos)
Ser vivo
● Permite que classes compartilhem código
– Uma classe pode “herdar” código de outra
– A classe herdeira pode criar uma versão Animal Planta
que seja mais genérica ou mais específica
que a versão original da atividade
Mamífero Réptil
Cão Gato
Engenharia de Aplicações em Redes – Introcução 17
Herança (Generalização/Especialização)
Engenharia de Aplicações em Redes – Introcução 18
Herança (Generalização/Especialização)
Engenharia de Aplicações em Redes – Introcução 19
Herança (Generalização/Especialização)
Engenharia de Aplicações em Redes – Introcução 20
Polimorfismo
● Uma certa operação muitas vezes pode ser definida de forma
equivalente para atributos de entrada de formas diferentes
● Polimorfismo permite que diversos métodos (que difiram em
suas assinaturas) recebam o mesmo nome
● Permite que métodos sejam identificados pelo seu
efeito/finalidade de forma uniforme, simplificando a tarefa do
programador
area_triangulo = calcula_area(lado1,lado2,lado3);
area_triangulo = calcula_area(base,altura);
area_triangulo = calcula_area(registro_triangulo);
Engenharia de Aplicações em Redes – Introcução 21
Relacionamentos
● Mecanismo pelo qual um objeto toma conhecimento dos
demais em um programa
– Basicamente, entre os atributos de um objeto deve haver informação
que lhe permita identificar um outro objeto
● Dois tipos básicos de relacionamento
– Associação: objetos independentes trocam mensagens
– Agregação: um objeto é composto por/contém outros objetos
Serviços Serviços
Dados Dados
Engenharia de Aplicações em Redes – Introcução 22
Relacionamentos
Agregação Composição
Engenharia de Aplicações em Redes – Introcução 23
Uma palavra de cautela
● Programar um computador é uma das tarefas mais difíceis
que se pode enfrentar
– Orientação a objetos não muda isso!
– Ela oferece um conjunto de abstrações, métodos e padrões que
viabilizam o desenvolvimento de programas melhores
Engenharia de Aplicações em Redes – Introcução 24
Etapas do desenvolvimento OO
● Identificar os objetos
● Descrevêlos:
– Elementos estáticos (estado)
– Comportamento dinâmico (ações que executam)
● Identificar e definir relações entre objetos
Engenharia de Aplicações em Redes – Introcução 25
Engenharia de Aplicações em Redes – Introcução 26