• 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

sandros@ufba.br

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

● E todos os seus dados são separados por , ● Em cada linha contém um registro. Nome,custo,preço, Macarrão,1.23,3.45, Arroz,4.78,9.00,

• Casos de uso representam funcionalidades completas para o usuário e não, funcionalidades internas do sistema. • Outro ponto importante é que o diagrama de casos de uso é

n Se os atributos estão private e todo acesso agora será feito por get/set, sempre que precisar de pegar os valores dos atributos, mesmo dentro de métodos públicos da classe faça

No Design Pattern Table Data Gateway, existe uma classe para manipulação de cada tabela do banco de dados, e apenas uma instância dessa classe irá manipular todos os registros

● Em Ruby, duas classes diferentes não precisam compartilhar tipos para obtermos polimorfismo sobre seus métodos. ● Duck Typing é uma forma de determinar a semântica válida de

• Tipagem dinâmica permite duck typing (tipagem pato) estilo de programação que evita verificar os tipos dos objetos, mas apenas seus métodos. • No exemplo anterior, a

• Todo objeto possui uma identidade; quando criamos um objeto com new, a identidade dele é diferente de todos os outros objetos, mesmo objetos da mesma classe, com o conteúdo

• Ou podemos criar uma classe só para representar essa função, mas aí temos que criar um arquivo .java para ela, e dar um nome para essa classe... • Ou podemos criar uma