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

Preview:

Citation preview

Engenharia de Software Orientada a Objetos

Professor: Guilherme TimóteoAula 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

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

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

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”.

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

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

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.

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

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.

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

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

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:

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:

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.

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.

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

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.

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.

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

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

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.

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.

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.

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.

Dúvidas

?

Recommended