Programação Orientada a Objetos - renatomaia.net · orientada a objetos, por meio do mecanismo de...

45
Renato Dourado Maia Universidade Estadual de Montes Claros Engenharia de Sistemas Gerenciando a Complexidade Programação Orientada a Objetos

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

Na Indústria de Software...

17/08/2015 13/45

Renato Dourado Maia – Programação Orientada a Objetos

Na Indústria de Software...

17/08/2015 14/45

Renato Dourado Maia – Programação Orientada a Objetos

Na Indústria de Software...

17/08/2015 15/45

Renato Dourado Maia – Programação Orientada a Objetos

Na Indústria de Software...

17/08/2015 16/45

Renato Dourado Maia – Programação Orientada a Objetos

Na Indústria de Software...

17/08/2015 17/45

Renato Dourado Maia – Programação Orientada a Objetos

Na Indústria de Software...

17/08/2015 18/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