Programação Orientada a Objetos - renatomaia.net · orientada a objetos, por meio do mecanismo de...
Transcript of Programação Orientada a Objetos - renatomaia.net · orientada a objetos, por meio do mecanismo de...
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
17/08/2015 2/45
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
17/08/2015 3/45
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?
17/08/2015 4/45
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
17/08/2015 5/45
Renato Dourado Maia – Programação Orientada a Objetos
Software – Complexidade Inerente
Por que os sistemas de software são complexos?
17/08/2015 6/45
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
17/08/2015 7/45
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
17/08/2015 8/45
Renato Dourado Maia – Programação Orientada a Objetos
Software – Complexidade Inerente Deve-se Criar uma Ilusão de Simplicidade...
17/08/2015 9/45
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
17/08/2015 10/45
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?
17/08/2015 11/45
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!!!
17/08/2015 12/45
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?
17/08/2015 19/45
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.
17/08/2015 20/45
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
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
17/08/2015 22/45
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.
17/08/2015 23/45
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
17/08/2015 24/45
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.
17/08/2015 25/45
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
17/08/2015 26/45
Renato Dourado Maia – Programação Orientada a Objetos
A Estrutura de Sistemas Complexos
17/08/2015 27/45
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!
17/08/2015 28/45
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”.
17/08/2015 29/45
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”.
17/08/2015 30/45
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
17/08/2015 31/45
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?
17/08/2015 32/45
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
17/08/2015 33/45
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
17/08/2015 34/45
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
17/08/2015 35/45
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...
17/08/2015 36/45
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!
17/08/2015 37/45
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
17/08/2015 38/45
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...
17/08/2015 39/45
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
17/08/2015 40/45
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.
17/08/2015 41/45
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
17/08/2015 42/45
Renato Dourado Maia – Programação Orientada a Objetos
Projeto de Sistemas Complexos Falha de Projeto?
17/08/2015 43/45
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!
17/08/2015 44/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/
17/08/2015 45/45