engenharia de software orientada a objetos professor: guilherme timóteo aula 1: introdução aos...
TRANSCRIPT
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
?