• Nenhum resultado encontrado

Programação Orientada a Objetos

N/A
N/A
Protected

Academic year: 2021

Share "Programação Orientada a Objetos"

Copied!
45
0
0

Texto

(1)

Renato Dourado Maia

Universidade Estadual de Montes Claros

Engenharia de Sistemas

Gerenciando a Complexidade

Programação Orientada a

Objetos

(2)

Renato Dourado Maia – Programação Orientada a Objetos

Unidade I – Gerenciando a Complexidade:

A complexidade inerente dos sistemas de software

A estrutura de sistemas complexos

Trazendo ordem ao caos

Decomposição

Abstração

Hierarquia

Sobre o projeto de sistemas complexos

Unidade I

(3)

Renato Dourado Maia – Programação Orientada a Objetos

Alguns

sistemas de software

não são

comple-xos

...

Como exemplos, podem ser citados os aplicativos que

são

especificados

,

criados

,

construídos

e

mantidos

pela

mesma pessoa

, ou seja, sistemas que têm um

propósito

limitado

e um

tempo de vida curto

:

Nesses casos, pode-se, simplesmente,

jogar o sistema fora

e construir outro

, em lugar de se tentar

reutilizá-lo

,

conser-tá-lo

, ou

estender a sua funcionalidade

!

Software – Complexidade Inerente

(4)

Renato Dourado Maia – Programação Orientada a Objetos

Mas é importante destacar que os sistemas de

software

interessantes

para nós são os

“industri-ais”

, que são

complexos

!

Software – Complexidade Inerente

O QUE CARACTERIZA UM SOFTWARE COMPLEXO?

(5)

Renato Dourado Maia – Programação Orientada a Objetos

Sistemas de software complexos:

Possuem

ciclo de vida longo

.

Dificilmente

uma

única

pessoa domina

todos os detalhes

do projeto.

A

complexidade

do sistema

ultrapassa

a

capacidade

in-telectual humana

.

A complexidade pode ser apenas

gerenciada

:

não

se

consegue fazer a complexidade

desaparecer

.

Mortais

, e não

gênios

, deverão realizar o gerenciamento.

Software – Complexidade Inerente

(6)

Renato Dourado Maia – Programação Orientada a Objetos

Software – Complexidade Inerente

Por que os

sistemas de

software são

complexos

?

(7)

Renato Dourado Maia – Programação Orientada a Objetos

Os sistemas de software são complexos em

fun-ção de

o domínio do problema ser complexo

:

O desenvolvedor normalmente

não

é quem

conhece o

domínio

.

A

captura dos requisitos

do sistema é uma tarefa

com-plicada

.

Os

requisitos

do sistema podem ser

instáveis

.

Deve-se sempre pensar na

evolução

do sistema.

Software – Complexidade Inerente

(8)

Renato Dourado Maia – Programação Orientada a Objetos

Os sistemas de software são complexos em

fun-ção da

dificuldade de se gerenciar o

desenvolvi-mento

:

Os desenvolvedores devem criar uma

ilusão de

simplici-dade

.

Tamanho

não é virtude em software!

Sistemas com

milhões de linhas de código

e com

milha-res de módulos distintos

são

comuns

atualmente.

O desenvolvimento em

equipe

faz com que

problemas

de comunicação

sejam muito

comuns

...

Software – Complexidade Inerente

(9)

Renato Dourado Maia – Programação Orientada a Objetos

Software – Complexidade Inerente

Deve-se Criar uma Ilusão de Simplicidade...

(10)

Renato Dourado Maia – Programação Orientada a Objetos

Os sistemas de software são complexos em

fun-ção de se ter

muita flexibilidade no

desenvolvi-mento

:

Isso pode ser uma grande

desvantagem

, pois há a

ten-dência de se

reinventar a roda

...

Um empreiteiro da construção civil

não planta árvores

para obter a madeira que vai usar na construção

: o

de-senvolvedor de software

muitas vezes

faz isso

!

Falta padronização

na indústria de software

.

Software – Complexidade Inerente

(11)

Renato Dourado Maia – Programação Orientada a Objetos

Consequências da Complexidade

A

probabilidade

de um sistema

entrar em colapso é

proporcional à

sua complexidade

! O que fazer?

(12)

Renato Dourado Maia – Programação Orientada a Objetos

Um construtor de edifícios pensaria em

adicionar

um novo

subsolo

a um edifício de 100 andares?

Usuários de software geralmente pedem que esse tipo

de modificação seja efetuada em um sistema existente!

Para Refletir

Isso é apenas uma questão

de programação!!!

(13)

Renato Dourado Maia – Programação Orientada a Objetos

Na Indústria de

Software...

(14)

Renato Dourado Maia – Programação Orientada a Objetos

Na Indústria de

Software...

(15)

Renato Dourado Maia – Programação Orientada a Objetos

Na Indústria de

Software...

(16)

Renato Dourado Maia – Programação Orientada a Objetos

Na Indústria de

Software...

(17)

Renato Dourado Maia – Programação Orientada a Objetos

Na Indústria de

Software...

(18)

Renato Dourado Maia – Programação Orientada a Objetos

Na Indústria de

Software...

(19)

Renato Dourado Maia – Programação Orientada a Objetos

Sem a

gerência da complexidade

, os sistemas de

software acabam sendo concluídos com

atraso

,

ultrapassando o orçamento

, e

não atendendo às

especificações de requisitos

...

Necessidade de Gerenciamento

Como resolver esses problemas?

(20)

Renato Dourado Maia – Programação Orientada a Objetos

Necessidade de Gerenciamento

Para

gerenciar

a complexidade, é

necessário

entender

a organização

dos sistemas complexos e

trazer

essa organização para os sistemas

de software.

(21)

Renato Dourado Maia – Programação Orientada a Objetos

Computador pessoal:

Mouse, placa-mãe, disco rígido...

A Estrutura de Sistemas Complexos

Microprocessador, memória, barramento

Registradores, unidade aritmética...

Portas lógicas...

Transistores...

.

.

.

17/08/2015 21/45

(22)

Renato Dourado Maia – Programação Orientada a Objetos

Os sistemas complexos possuem uma estrutura

hierárquica

, com

diferentes níveis de abstração

,

construídos um sobre o outro:

O computador pessoal funciona corretamente devido à

colaboração

existente entre as suas

diversas partes

.

O funcionamento de um computador é descrito por meio

de sua

decomposição

em partes que podem ser

estuda-das separadamente

.

Em cada nível de abstração, os elementos

cooperam

en-tre si para desempenhar sua funcionalidade, por meio de

uma interface conhecida, e oferecem

serviços

para os

níveis mais altos.

A Estrutura de Sistemas Complexos

(23)

Renato Dourado Maia – Programação Orientada a Objetos

Exemplos de sistemas complexos:

Estrutura de plantas.

Estrutura de animais.

Estrutura da matéria.

A Estrutura de Sistemas Complexos

EXISTEM FRONTEIRAS CLARAS ENTRE AS PARTES INTERNAS

E EXTERNAS DE UM DETERMINADO NÍVEL DE ABSTRAÇÃO!!!

As partes da folha de uma planta colaboram entre si para que a

folha desempenhe seu papel de realizar a fotossíntese e, ao

mesmo tempo, têm pouca ou nenhuma cooperação direta com

as partes elementares que compõem a raiz.

(24)

Renato Dourado Maia – Programação Orientada a Objetos

A complexidade é organizada na forma de uma

hierarquia

:

Um sistema complexo é composto por

subsistemas

in-ter-relacionados

, que, por sua vez, têm seus

próprios

subsistemas

, e assim por diante, até que se chegue aos

componentes

elementares

.

A

escolha

de quais componentes de um sistema

são

elementares

, ou

primitivos

, é

relativamente

arbitrária

e depende basicamente daquilo que o

observador

do sistema

quer enxergar

.

Os Atributos de Sistemas Complexos

(25)

Renato Dourado Maia – Programação Orientada a Objetos

Os relacionamentos

internos

entre os

subcompo-nentes de um determinado nível da hierarquia

são

fortes

e, entre componentes da hierarquia

em níveis

distintos

,

fracos

.

Normalmente, sistemas hierárquicos são

consti-tuídos por um

número reduzido de diferentes

ti-pos de subsistemas

, organizados em diversas

combinações

e

arranjos

.

A Estrutura de Sistemas Complexos

Sistemas complexos contêm padrões comuns,

como, por exemplo, as células no animais.

(26)

Renato Dourado Maia – Programação Orientada a Objetos

Um sistema complexo que funciona, é,

invaria-velmente um

aperfeiçoamento

de outro sistema

mais

simples

que funcionava:

Um sistema complexo projetado a partir do nada

quase

nunca funciona

.

À medida que um sistema complexo é

aperfei-çoado

, objetos que antes eram considerados

complexos

passam a ser os objetos

primitivos

,

baseados nos quais os sistemas mais complexos

são construídos.

A Estrutura de Sistemas Complexos

(27)

Renato Dourado Maia – Programação Orientada a Objetos

A Estrutura de Sistemas Complexos

(28)

Renato Dourado Maia – Programação Orientada a Objetos

Descobrir

abstrações e mecanismos comuns

faci-lita o entendimento de sistemas complexos.

A Forma Canônica de Sistemas

Complexos

Um motorista consegue pilotar um novo modelo de automóvel

simplesmente identificando onde estão o volante, o freio, o

acelerador, a embreagem, as marchas e a ignição: esses são

mecanismos comuns presentes em todos os carros!

(29)

Renato Dourado Maia – Programação Orientada a Objetos

Um sistema complexo geralmente contém

várias

hierarquias

:

Um carro possui o sistema de propulsão, o de controle

de direção, de frenagem, etc ...

A Forma Canônica de Sistemas

Complexos

Hierarquia estrutural “todo-parte”.

(30)

Renato Dourado Maia – Programação Orientada a Objetos

Um

outro tipo

de hierarquia estrutural é

exempli-ficado a seguir:

Um animal vertebrado

é um tipo

de animal.

Um mamífero

é um tipo

de animal vertebrado.

Um primata

é um tipo

de mamífero.

Um macaco

é um tipo

de primata.

...

A Forma Canônica de Sistemas

Complexos

Hierarquia estrutural “é um tipo de”.

(31)

Renato Dourado Maia – Programação Orientada a Objetos

Cenas dos próximos capítulos

:

A hierarquia

“é um tipo de”

será modelada, na análise

orientada a objetos, por meio do mecanismo de

heran-ça

, e a hierarquia

“todo parte”

, por meio do mecanismo

de

composição

.

A Forma Canônica de Sistemas

Complexos

(32)

Renato Dourado Maia – Programação Orientada a Objetos

Uma Pergunta...

Já que se sabe que o projeto de um

sistema complexo deve ser feito com

base na

decomposição

em hierarquias,

porque o desenvolvimento de software

é tão

problemático

?

(33)

Renato Dourado Maia – Programação Orientada a Objetos

O modelo de desenvolvimento de softwares

ori-entado a objetos é

relativamente novo

...

A decomposição em hierarquias é uma

tarefa

complicada

, pois

descobrir abstrações

e

mecanis-mos comuns num sistema

não é simples

,

especi-almente para sistemas

inexistentes

, para os

quais se estará projetando a arquitetura:

inven-tando os mecanismos

,

agrupando as partes

,

li-dando-se possivelmente com um

número

bastan-te

grande

de possíveis

escolhas

...

Respondendo...

EXPERIÊNCIA + APRENDER COM AS BOAS SOLUÇÕES = PADRÕES

(34)

Renato Dourado Maia – Programação Orientada a Objetos

A

decomposição

é uma técnica básica de

geren-ciamento da complexidade

.

Trazendo Ordem ao Caos...

SISTEMAS DE SOFTWARE

DECOMPOSIÇÃO

ALGORITMICA

DECOMPOSIÇÃO

ORIENTADA

A OBJETOS

PROGRAMAÇÃO ESTRUTURADA

(35)

Renato Dourado Maia – Programação Orientada a Objetos

Trazendo Ordem ao Caos...

SISTEMA

HIERARQUIZADO

SISTEMA = CONJUNTO

DE SUBSISTEMAS QUE

INTERAGEM ENTRE SI

DECOMPOSIÇÃO

ORIENTADA A OBJETOS

ABSTRAÇÕES CHAVE:

CLASSES E OBJETOS

SISTEMA = COLEÇÃO DE

OBJETOS AUTÔNOMOS

QUE COLABORAM ENTRE SI

CADA OBJETO É UMA

ENTIDADE QUE EXIBE UM

COMPORTAMENTO BEM

DEFINIDO

(36)

Renato Dourado Maia – Programação Orientada a Objetos

Quais são as

vantagens

da decomposição

orien-tada a objetos

?

Essa pergunta será

respondida ao longo do semestre

.

Mas, considerando-se o que foi estudado até agora,

po-dem-se citar algumas vantagens:

Ajuda a

organizar a complexidade inerente dos sistemas de

software

, assim como ajudou a compreender a organização

de um computador pessoal.

Favorece a

reutilização

de mecanismos comuns, por

inter-médio da utilização de

classes primitivas

que implementam

abstrações básicas

.

Favorece o

desenvolvimento incremental

do sistema.

Trazendo Ordem ao Caos...

(37)

Renato Dourado Maia – Programação Orientada a Objetos

Os engenheiros têm uma

técnica

fabulosa para

gerenciar a complexidade

: se não conseguem

tratar

todos os detalhes

de um sistema, escolhem

ignorar

alguns detalhes não essenciais, utilizando

um

modelo idealizado

.

Trazendo Ordem ao Caos...

ABSTRAÇÃO!

(38)

Renato Dourado Maia – Programação Orientada a Objetos

A

abstração

consiste em

retirar

do domínio do

problema

os detalhes

relevantes

, e

representá-los na linguagem da

solução

.

Trazendo Ordem ao Caos...

Problema

Modelo

ABSTRAÇÃO

(39)

Renato Dourado Maia – Programação Orientada a Objetos

A

hierarquia

, tal como já foi visto, possui um

pa-pel

essencial

na

organização

de sistemas

comple-xos.

Na

análise orientada a objetos

a criação de

hie-rarquias

vai ser efetuada por meio dos

mecanis-mos de

herança

e de

composição

.

Trazendo Ordem ao Caos...

(40)

Renato Dourado Maia – Programação Orientada a Objetos

Em

Engenharia

, a criação de um produto envolve

tanto elementos de

ciência

quanto de

arte

.

Dese-ja-se construir um sistema que:

Satisfaça uma

especificação funcional

.

Respeite

limitações

de hardware e software.

Satisfaça

requisitos

explícitos

ou

implícitos

de

desempe-nho e de utilização de recursos.

Satisfaça

restrições

econômicas

.

Satisfaça

restrições

associadas ao

processo de

desenvol-vimento

, tais como a equipe de engenheiros e as

ferra-mentas disponíveis para o projeto.

Projeto de Sistemas Complexos

(41)

Renato Dourado Maia – Programação Orientada a Objetos

Para tanto, deve-se criar um projeto capaz de

levar em conta, da melhor maneira possível, um

conjunto de

requisitos conflitantes

.

Projeto de Sistemas Complexos

São criados diversos modelos, sendo que

cada um descreve um aspecto específico do

sistema.

(42)

Renato Dourado Maia – Programação Orientada a Objetos

Para o projeto de um sistema de software, o

ca-minho é o mesmo, e devem ser escolhidos:

Uma notação:

Linguagem

para representar os

modelos

, tal como a UML – Unified

Modeling Language.

Um processo:

As

atividades

que, quando executadas de forma ordenada, levam

à construção do sistema (é o que se estuda em

Engenharia de

Software

).

Ferramentas:

Auxiliam

na execução das tarefas, eliminando a parte “chata” de

construção dos modelos.

Projeto de Sistemas Complexos

(43)

Renato Dourado Maia – Programação Orientada a Objetos

Projeto de Sistemas Complexos

Falha de Projeto?

(44)

Renato Dourado Maia – Programação Orientada a Objetos

Mensagem Final

Durante o semestre, estudaremos

como a

análise

, o

projeto

e a

programação

orientados a objetos

facilitam

o

projeto

e

implementação

de

sistemas de software

complexos

!

(45)

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/

Referências

Documentos relacionados

• O Java ME fornece um ambiente para aplicativos em execução em uma grande variedade de dispositivos móveis e integrados, como:. – Telefones celulares

– Tipo de dados que o objeto armazena, ou seja, os estados possíveis que ele pode assumir (atributos) – Tipos de operações que podem ser executadas pelo. objeto, ou seja, o

para o usuário digitar um nome; pega o valor digitado e altera na variável nome do objeto da Conta Bancária, através do método Alterar Nome.. Realiza saque/depósito, e depois

– Crie um construtor parametrizado inicializando todas as variáveis com os valores recebidos dos parâmetros. – Crie um construtor default (Inicializando as variáveis da

• Diferentes componentes de um sistema não devem revelar detalhes internos de suas..

• É possível comprar acessando o método comprar, passando como parâmetro dois objetos, um do tipo Pessoa e outro do tipo Produto.. M.; Programação Orientada

– É o processo de esconder todos os detalhes de um objeto que não contribuem para suas características

– Pode ser acessado por qualquer outra classe em qualquer outro pacote.