24
Engenharia de Software Orientada a Objetos Professor : Guilherme Timóteo Aula 1 : Introdução aos conceitos de modelagem

Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Embed Size (px)

Citation preview

Page 1: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Engenharia de Software Orientada a Objetos

Professor: Guilherme TimóteoAula 1: Introdução aos conceitos de modelagem

Page 2: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Agenda• Histórico• Definição - Orientação a Objetos• Definição – Desenvolvimento O.O.• Metodologia Orientada a Objetos• Temas de Orientação a Objetos– Abstração– Encapsulamento– Compartilhamento

Page 3: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Histórico• 1946: Criação de uma máquina considerada o

primeiro computador do mundo. Esta máquina se chamava Eniac.

Page 4: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Histórico• 1957 - Criação da Linguagem de Programação Fortran• 1958 – Criação da Linguagem de Programação Algol• 1964 – Criação da Linguagem de Programação Basic• 1967 - Ole-Johan Dhal e Kristen Nygaard desenvolvem

a linguagem Simula-67, com vários conceitos que posteriormente seriam base para a Orientação a Objetos: classes, objetos, funções virtuais, garbage collection, etc.

• 1970 - Alan Key cunha os termos ”object-oriented” e ”objectoriented programming”.

Page 5: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Histórico• Década de 1970 - Crise do Software– Elementos desencadeadores:

• Desenvolvimento de Software de forma “artesanal” através do desenho de telas e arquivos

• Constantes erros de execução• Pouco tempo para coletar dados• Não cumprimento de prazos• Problemas de custos inesperados relacionados a correção de

erros e adaptação do código• Código/documentação ilegível ou inexistente• Comunicação durante o desenvolvimento muito fraca• Falta de testes complexos• Insatisfação de usuários

Page 6: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Histórico• A partir da década de 70 foram desenvolvidas

metodologias para tentar resolver os problemas criticos dos sistemas

• 1980 – Bjarne Stroustrup cria extensões orientadas a objeto para C e chama essa linguagem de ”C com classes ”.

• 1981 – Grady Booch desenvolve um processo de desenvolvimento, com uma notação que viria a ser conhecida como “Diagramas de Booch”.

• 1982 - A Agência Espacial Européia propõe uma técnica de projeto orientado a objetos, chamada HOOD (Hierarchical Object-Oriented Design )

• 1985 – Bertrand Meyer propõe a linguagem Eiffel

Page 7: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Histórico• 1991 – James Rumbaugh propõe uma metodologia nomeada

OMT (Object Modeling Technique). A notação do diagrama de classes de OMT viria a servir como base para UML.

• 1991 – A Sun começa a desenvolver uma nova linguagem orientada a objetos chamada Java, originalmente projetada para criar software para eletrodomésticos.

• 1994 – Grady Booch, James Rumbaugh e Ivar Jacobson começam a trabalhar na especificação de UML (Unified Modeling Language) Coleman e outros autores propõem a metodologia Fusion.

• 1995 – A Borland lança Delphi 1.0• 1997 – Lançada oficialmente a especificação 1.0 de UML.• 2004 – Lançada a especificação 2.0 de UML.• 2006 - Rumbaugh, em conjunto com Blaha lançam uma nova

metodologia para análise e projetos orientados a objetos.

Page 8: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Orientação a Objetos• Definição: Significa organizar um sistema

como uma coleção de objetos distintos, que incorporam dados e comportamentos.

• As 4 principais características deste paradigma são:– Identidade– Classificação– Herança– Polimorfismo

Page 9: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Identidade• Significa que os dados são quantizados em

entidades distintas, chamadas objetos.• Cada objeto tem sua própria identidade, mesmo

que eles tenham todos os atributos iguais.– Ex: Duas bolas de futebol da FIFA para a copa do

Mundo. Elas possuem todas as características iguais (tamanho, peso, etc), mas são dois objetos distintos.

• Num sistema orientado a objetos, cada objeto possui uma referência única para que o mesmo possa ser acessado.

Page 10: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Classificação• Significa que os objetos com a mesma estrutura de dados

(atributos) e comportamentos (operações) podem ser agrupados em uma classe.– Ex: uma classe para agrupar os objetos Motos.

Abstrair

Page 11: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Herança• Significa o compartilhamento de atributos e operações entre

classes com relacionamento hierárquico.• A hierarquia é definida entre a superclasse e subclasse.

• A superclasse contém as informações gerais que são compartilhadas entre as subclasses.

• As subclasses contém as informações específicas refinando assim o modelo de classes.

Superclasse

Subclasse 1 Subclasse 2

Page 12: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Herança – Um exemplo• Ex: Clientes externos e internos de um estabelecimento comercial.

Clientes internos são os próprios funcionários e tem um desconto especial nas mercadorias. Clientes externos são aqueles que compram mas não tem nenhum relação com o estabelecimento.

• Abaixo um possível modelo de classes simplificado para a situação acima:

Page 13: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Polimorfismo• Significa que uma operação pode se comportar de forma

diferente para diferentes classes.• A principal vantagem do Polimorfismo é clareza no código e a

facilidade de manutenção. Vamos ao exemplo abaixo:

Page 14: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Polimorfismo• Note que tanto na classe Cliente quanto na classe Cliente_Interno

existe uma operação chamada VerificarCredito().• Na classe Cliente_Interno a operação VerificarCredito faz uma

verificação de crédito especial baseada no salário do funcionário.

Page 15: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Desenvolvimento O.O.• Refere-se ao ciclo de vida do software:– Análise– Projeto– Implementação

• A essência do desenvolvimento é tentar representar (modelar) o problema antes de implementá-lo em uma linguagem específica.

• No passado, o enfoque de grande parte da comunidade científica foi a implementação, mas atualmente o foco mudou. Agora, os autores focam a análise e projeto.

Page 16: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Metodologia O.O.• Basicamente é um processo para

desenvolvimento OO e também uma notação gráfica para representar os conceitos de O.O..

• A metodologia proposta por Rumbaugh é dividida nas seguintes etapas:– Concepção do sistema– Análise– Projeto do Sistema– Projeto de Classes– Implementação

Page 17: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Metodologia O.O.• Concepção: fase inicial do processo onde os usuários

do sistema fornecem os requerimentos do sistema.• Análise: fase no qual o analista examina

detalhadamente os requisitos informados na etapa de concepção. Existem dois tipos de análise:– Análise do Domínio: que é uma descrição do mundo real

refletido no sistema, ou seja, é um mapeamento dos objetos envolvidos no negócio dentro de um sistema.

– Análise da Aplicação: que é uma descrição das partes do sistema que são visíveis ao usuário, mas não estão definidas na análise do domínio. Por exemplo: interfaces para ingresso dos dados, apresentação de resultados em relatórios ou consultas.

Page 18: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Metodologia O.O.• Projeto do sistema: é um planejamento de alto nível da

arquitetura do sistema para solução do problema da aplicação. O projetista precisa decidir a respeito das características de desempenho, estratégia para protocolo de comunicação, etc.

• Projeto de Classes: O projetista vai refinar o modelo de classes em função das características indicadas no projeto do sistema.

• Implementação: os implementadores traduzem as classes e os relacionamentos desenvolvidos durante o projeto de classes em uma linguagem de programação, banco de dados ou hardwares específicos.

Page 19: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Temas de O.O.• Existem alguns temas importantes a serem

quando estamos falando de O.O.. • São eles:– Abstração– Encapsulamento– Compartilhamento

Page 20: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Abstração• Permite que você se concentre nos aspectos

essenciais de uma aplicação ignorando os detalhes.

• Isso significa focar o que o objeto faz, antes de decidir como implementá-lo.

• O uso da abstração permite que você tome decisões sem que haja um grande prejuízo de tempo.– Corrigir uma abstração é sempre menos custosa

do que corrigir uma implementação.

Page 21: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Encapsulamento• Também chamado de ocultamento das informações.• O encapsulamento evita que partes do programa se

tornem tão independentes que uma pequena mudança gere efeitos em cascata.

• O encapsulamento permite que você mude a implementação sem afetar as aplicações que o utilizam.

• Para exemplificar, podemos pensar em uma dona de casa (usuário da classe) utilizando um liquidificador (sistema). O usuário não necessita conhecer detalhes do funcionamento interno do sistema para poder utilizá-lo, precisa apenas conhecer a interface, no caso, os botões que controlam o liquidificador.

Page 22: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Compartilhamento• A herança tanto de atributos quanto de

comportamentos permitem que as subclasses compartilhem códigos comuns.

• Este compartilhamento garantirá maior economia de código.

• A manutenção também ficará facilitada, pois será necessária somente a modificação do código compartilhado e não de toda a aplicação.

Page 23: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Resumo dos conceitos• Orientação a Objetos – significa organizar um software através de

objetos• Metodologia O.O. – é um conjunto de procedimentos sugeridos

para o desenvolvimento de um sistema O.O.• Identidade – indica que os dados são indicados em entidades

distintas• Classificação – agrupamento de objetos com características

semelhantes• Encapsulamento – é o ocultamento de informações que evita os

erros em cascata• Herança – é a capacidade de compartilhar dados e atributos• Polimorfismo – é a capacidade de uma operação ter

comportamento distinto para diferentes classes• Abstração – tratamento dos informações gerais sem considerar os

detalhes.

Page 24: Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 1: Introdução aos conceitos de modelagem

Dúvidas

?