• Nenhum resultado encontrado

Orientação a Objetos (O paradigma da orientação a objetos)

N/A
N/A
Protected

Academic year: 2021

Share "Orientação a Objetos (O paradigma da orientação a objetos)"

Copied!
56
0
0

Texto

(1)

Orientação a Objetos

(O paradigma da orientação a objetos)

Zamir, Cap 1 Taylor, Cap 1 Wirfs-Brock, Cap 1

Meyer, Caps 1

Sandro Santos Andrade

[email protected]

Universidade Federal da Bahia

Departamento de Ciência da Computação (DCC) Laboratório de Sistemas Distribuídos (LaSiD) Especialização Avançada em Sistemas Distribuídos

(2)

O Paradigma OO

Permite que aplicações sejam construídos no

contexto de objetos ao invés de processos

Benefícios:

Qualidade do software, ganhos econômicos, ciclos de

desenvolvimento mais curtos, suporte a distribuição em ambientes heterogêneos

Mais de 80% das indústrias de desenvolvimento

utilizam o paradigma OO

(IDC)

É uma das quatro mais importantes áreas de

(3)

Principais Conceitos

Objetos:

 Representações executáveis de entidades e conceitos

do mundo real

Mensagens:

 Disponibilizam um meio de comunicação universal para

interação entre objetos

Classes:

 Matrizes para a definição de objetos similares que

fornecem a base para a abstração das características comuns de objetos do mundo real

(4)

Objetos

O mundo é feito de objetos físicos e conceituais

Def: um objeto é um pacote de software que inclui

todos os dados e procedimentos necessários para

representar uma entidade do mundo real para um

conjunto específico de propósitos

Implicações:

Objetos são unidade de modularização do software

 Pacotes de objetos relacionam dados e procedimentos  A modelagem se torna a atividade central no projeto do

(5)

Mensagens

Def: uma mensagem é uma requisição para que

um objeto particular execute um procedimento

(método) específico

 Ex: product.price (quantity);

A especificação da mensagem é geralmente

chamada de assinatura

Uma mensagem pode ser respondida de

(6)

Classes

Def: uma classe é uma definição genérica que se

aplica a um conjunto de objetos similares

Especifica os métodos e atributos usados por

objetos que são instâncias desta classe

Instâncias mantêm valores locais e individuais dos

seus atributos

Representam o mecanismo principal para o

processo lógico de abstração

Estendem o mecanismo básico de tipagem das

(7)

Principais Mecanismos

Encapsulamento:

 Mecanismo de empacotamento de dados e

procedimentos dentro de objetos

Polimorfismo:

 Habilidade de implementar a mesma mensagem de

diferentes formas em diferentes objetos

Herança:

 Mecanismo para disseminar informações definidas em

classes genéricas para outras classes declaradas como casos especiais das classes genéricas

(8)

Encapsulamento

Objetos respondem e enviam mensagens de uma

forma que não revela a sua estrutura interna

Suporta o ocultamento de informação:

 Previne que mudanças locais gerem impactos globais

Desenvolvedores mudam os atributos e métodos

sem afetar a forma que o objeto interage

(9)

Polimorfismo

Possibilita que objetos diferentes responstam à

mesma mensagem

Simplifica a lógica de programas:

ANTES if instrument is privateStock then value = valuePrivateStock(instrument) publicStock then value = valuePublicStock(instrument) ...

Otherwise report error

DEPOIS

(10)

Polimorfismo

Vantagens de mensagens polimórficas:

 São menores, reduzindo o tamanho e complexidade do

código-fonte

 Executam mais rápido visto que não requerem uma

busca para identificar qual mensagem enviar

 São flexíveis pois novas implementações podem ser

adicionadas ou removidas sem precisar reescrever a lógica de seleção da mensagem

Reflete a forma natural de comunicação:

 Ex: o gerente solicita de todos os departamentos:

(11)

Herança

Def: mecanismo que permite que uma classe seja

definida como um caso especial, ou sub-classe, de

outra (super-classe). Isto pode ocorrer em vários

níveis, constituindo uma hierarquia de classes

Sub-classes automaticamente incorporam os

métodos e atributos da super-classe (herança de

implementação)

Uma classe pode manter a definição de um

método herdado da super-classe ou pode realizar

uma sobreposição (override)

(12)

Herança

Sobreposições suportam generalização /

especialização

Heranças podem também ser utilizadas para

categorizar tipos (herança de interface)

Algumas linguagens suportam herança múltipla.

(13)

A Tecnologia de Objetos

Uma linguagem é OO se ela implementa os três

mecanismos citados e não os conceitos:

 Uma linguagem pode ser OO sem ter os três conceitos  Uma linguagem pode não ser OO mesmo possuindo os

três conceitos

Linguagens que suportam encapsulamento e

polimorfismo mas não suportam herança são ditas

baseadas em objetos

(14)

Benefícios

Produtividade:

 Resulta da habilidade de reusar lógica genérica

expressa em classes previamente construídas

Qualidade:

 Resulta da estrutura simplificada dos programas OO e

da maior oportunidade para testes de unidade extensivos

Evolução:

 Resulta da habilidade de alterar a estrutura e o

comportamento de objetos individuais sem afetar outros objetos do sistema

(15)

Produtividade

Manutenção representa 80% do custo total de um

software

Codificação representa cerca de 20% do custo

pré-manutenção

O objetivo é reuso de ciclo de vida:

 A análise e projeto são direcionados para valores de

longo-prazo

 Cada objeto irá requerer pouca ou nenhuma

(16)

Qualidade

O uso de objetos por si só não melhora a

qualidade do software. Exs: mau uso de herança,

altos acoplamentos

Porém:

 Encapsulamento: melhora a habilidade de isolar e

reparar problemas. Oferece melhor controle sobre acesso a dados

 Polimorfismo: elimina as lógicas condicionais,

simplificando sistemas complexos

 Herança: reduz o tamanho e complexidade do

(17)

Evolução

Construir sistemas que evoluem rapidamente em

resposta a mudanças nos requisitos é um grande

desafio

Mecanismos:

 Encapsulamento: permite que mudanças locais tratem

problemas que antes requeriam modificações extensivas

 Polimorfismo: permite que novos tipos de objetos

sejam adicionados sem modificar o código existente

 Herança: permite que uma modificação local produza

(18)

Evolução

Sistemas não devem ser projetados para resolver

um conjunto específico de problemas

Deve-se analisar sistemas e criar modelos

executáveis do mundo-real ao invés de analisar

problema e desenvolver soluções específicas para

o problema

(19)

Outros Mecanismos

Interfaces:

 Disponibilizam uma forma sistemática de separar quais

tarefas um objeto faz da forma como são realizadas

Delegação:

 Oferece uma alternativa à herança, simplificando o

sistema e aumentando a flexibilidade

Distribuição:

 Permite que um conjunto de objetos seja implantado

em diferentes máquinas de uma rede, incluindo a Internet

(20)

Interfaces

Na maioria das linguagens OO uma classe define

tanto o que o objeto poderá realizar quanto como

tais tarefas serão realizadas

Isso pode confundir dois conceitos importantes:

 O que um objeto faz define o seu tipo

 Como um objeto realiza tal tarefa define a sua

implementação

Def: uma interface é um conjunto identificado de

assinatura de mensagens

 Especifica o tipo de um objeto através dos serviços que

(21)

Interfaces

Benefícios:

 Classes de diferentes fornecedores podem ser

interconectadas

 Se interfaces são utilizadas como parâmetros de

funções, qualquer objeto que implementa a interface pode ser passado neste parâmetro

 Interfaces podem restringir o acesso ao objeto se este

implementa diversas interfaces, uma para cada papel

Interfaces foram explicitamente e

sistematicamente suportadas pela primeira vez na

linguagem Java

(22)

Delegação

Herança de implementação é perigosa pois viola o

encapsulamento ao conceder, à sub-classe,

acesso às estruturas internas da super-classe

Def: ao invés de realizar a tarefa, o objeto delega

a função para outro objeto

Deve-se utilizar delegação sempre que adequado,

(23)

Distribuição

Protocolos padronizados para comunicação de

objetos em rede: CORBA, DCOM, RMI, EJB, Web

Services

Permite:

Location Transparency

Remoteness Transparency  Objetos móveis

(24)

Fatores de Sucesso

Motivação:

 Adotar a tecnologia de objetos pelas razões erradas

pode ser perigoso

Formação:

 Iniciar um projeto OO com uma visão parcial do

paradigma irá comprometer o sucesso do sistema

Determinação:

 Para sobreviver a um período inicial de retorno mínimo

antes de usufruir dos verdadeiros benefícios do paradigma

(25)

Orientação a Objetos

e

(26)

Qualidade de Software

Fatores externos:

 Qualidades cuja presença ou ausência podem ser

percebidas por usuário do sistema. Ex: facilidade de uso, desempenho

Fatores internos:

 Qualidades percebidas somente pelos profissionais

que mantêm o código-fonte. Ex: modularidade, legibilidade

Os fatores externos são os mais importantes,

(27)

Fatores Externos

Corretude (correctness):

É a habilidade de um software realizar suas tarefas de

maneira correta, conforme definido por sua especificação

 Depende da especificação precisa dos requisitos  Debugging x corretude desde o projeto

(28)

Fatores Externos

Robustez (robustness):

É a capacidade de um software reagir

apropriadamente a condições anormais

Espera-se que, na ocorrência de casos anormais, o

sistema produza mensagens de erro apropriadas,

termine sua execução de forma controlada ou entre

em um modo de graceful degradation

(29)

Fatores Externos

Extensibilidade (extendibility):

É a facilidade de adaptar o software a mudanças na

especificação

Depende diretamente da complexidade do software  Os requisitos certamente mudarão

 Melhorada pelo uso de dois princípios:

 Simplicidade de projeto: uma arquitetura simples é mais

fácil de adaptar a mudanças do que uma complexa

 Descentralização: quanto mais autônomos os módulos

maior a chance de uma mudança afetar somente um módulo ou um pequeno número deles, ao invés de

(30)

Fatores Externos

Reusabilidade (reusability):

É a habilidade onde os elementos do software servem

para a construção de muitas aplicações diferentes

 Sistemas computacionais seguem padrões similares  Se menos código for escrito, maior atenção pode ser

dada a outros fatores, como corretude e robustez

 Indispensável para que tenhamos uma verdadeira

(31)

Fatores Externos

Compatibilidade (compatibility):

É a facilidade de combinar elementos de software com

outros elementos

 Sistemas frequentemente precisam interagir uns com

os outros

 Deve-se utilizar formatos de arquivos, estruturas de

dados e interfaces de usuário padronizadas

Protocolos padronizados tais como CORBA, web

services e OLE-COM contribuem para a

(32)

Fatores Externos

Eficiência (efficiency):

É a habilidade de um software de demandar o mínimo

possível dos recursos de hardware (processador, memória, largura de banda, etc)

 Um sistema super-otimizado pode ter sua

extensibilidade e reusabilidade prejudicados

 O rápido aumento do poder dos equipamentos

incentiva uma postura mais relaxada em relação à eficiência

(33)

Fatores Externos

Eficiência (efficiency):

 Entretanto deve ser considerada pois:

 Máquinas melhores devem trazer melhorias no

desempenho: processar problemas prévios de forma mais rápida ou suportar problemas maiores

 Algoritmos com complexidade ruim não são favorecidos

por máquinas melhores: uma máquina com o dobro de poder irá processar o dobro em algoritmos O(n), 41% a mais naqueles O(n2) e somente um a mais em soluções O(2n)

 Eficiência pode afetar a corretude: sistemas de tempo-real,

(34)

Fatores Externos

Portabilidade (portability):

 É a facilidade de transferir o sistema para vários

ambientes de hardware e software

 Inclui mudanças no sistema operacional, gerenciadores

de janelas etc

Facilidade de uso (ease of use):

 É a facilidade na qual pessoas de diferentes

experiências e qualificações podem aprender a usar o

software e aplicá-lo na resolução de problemas. Isto

inclui instalação, operação e monitoramento`

(35)

Fatores Externos

Funcionalidade (functionality):

 É a extensão de funcionalidades providas pelo sistema  Featurism: pressão por novas funcionalidades

 Funcionalidades demais afeta a facilidade de uso  Não se deve esquecer as outras qualidades:

(36)

Fatores Externos

Prazo (timeliness):

É a habilidade de um software de ser lançado antes ou

no prazo estipulado

 É uma das grandes frustrações da indústria

Outras qualidades:

VerifiabilityIntegrity

RepairabilityEconomy

(37)

Fatores Externos

Documentação:

 Externa, interna e de interface de módulo

Abordagens:

Help on-line, linguagens de programação que

favorecem clareza e estrutura e ocultamento de informação

(38)

Fatores Externos

(39)

Fatores Externos

(40)

Fatores Externos

Tradeoffs:

 Integridade x facilidade de uso  Economia x funcionalidade

 Eficiência x portabilidade  Eficiência x reusabilidade  Prazo x extensibilidade

(41)

Manutenção de Software

70% do custo do software é dedicado à

manutenção:

 Para refletir mudanças do mundo externo

(42)
(43)
(44)
(45)
(46)
(47)
(48)
(49)
(50)
(51)
(52)
(53)
(54)
(55)
(56)

Referências

Documentos relacionados