Renato Dourado Maia
Universidade Estadual de Montes Claros
Engenharia de Sistemas
Gerenciando a Complexidade
Programação Orientada a
Objetos
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
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
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?
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
Renato Dourado Maia – Programação Orientada a Objetos
Software – Complexidade Inerente
Por que os
sistemas de
software são
complexos
?
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
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
Renato Dourado Maia – Programação Orientada a Objetos
Software – Complexidade Inerente
Deve-se Criar uma Ilusão de Simplicidade...
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
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?
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!!!
Renato Dourado Maia – Programação Orientada a Objetos
Na Indústria de
Software...
Renato Dourado Maia – Programação Orientada a Objetos
Na Indústria de
Software...
Renato Dourado Maia – Programação Orientada a Objetos
Na Indústria de
Software...
Renato Dourado Maia – Programação Orientada a Objetos
Na Indústria de
Software...
Renato Dourado Maia – Programação Orientada a Objetos
Na Indústria de
Software...
Renato Dourado Maia – Programação Orientada a Objetos
Na Indústria de
Software...
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?
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.
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/45Renato 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
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.
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
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.
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
Renato Dourado Maia – Programação Orientada a Objetos
A Estrutura de Sistemas Complexos
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!
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”.
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”.
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
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
?
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
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
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
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...
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!
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
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...
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
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.
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
Renato Dourado Maia – Programação Orientada a Objetos
Projeto de Sistemas Complexos
Falha de Projeto?
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
!
Renato Dourado Maia – Programação Orientada a Objetos