Complexidade do Software Sistemas de software são complicados Os requisitos modernos tendem a complicálo cada vez mais: Alta confiabilidade; Alto desempenho; Desenvolvimento rápido e barato Precisamos de mecanismos de gerenciamento da complexidade: Abstração; Generalização; Agregação.
O software deve passar uma ilusão de simplicidade:
Paradigma Procedural X OO Procedural tipos de dados variável função/procedimento chamada de função OO classes/tad objeto/instância operação/serviço passagem de mensagem
Processo Orientado a Objetos Baseia-se em objetos e não em procedimentos O projetista não inicia o processo com a O projetista não inicia o processo com a identificação das funções do sistema, mas sim pela identificação dos objetos
Modelo de Objetos Idéias Básicas Representar o software através de elementos do mundo real: Entidades físicas Entidades abstratas Unificação dos conceitos de dados e funções (encapsulamento)
Fundamentos do Modelo de Objetos Encapsulamento Modularidade Abstração de dados Hierarquia de Abstração
Encapsulamento Ocultação de informação (Information Hiden) esconder detalhes de um objeto que não contribuem para suas características essenciais Separar aspectos de uso de aspectos de implementação Um objeto Um objeto (componente de software) possui uma interface visível e uma parte interna invisível
Modularidade É a propriedade de construir um sistema através de módulos altamente coesos e fracamente acoplados. Coesão do módulo: Acoplamento: interrelação entre interdependência seus componentes entre módulos
Abstração Concentrar no que é relevante e ignorar detalhes. Abstração descreve características essenciais do objeto que o distingue de outros tipos de objetos, e portanto proporciona limites conceituais bem definidos, relativo à perspectiva do observador.
Hierarquia de Abstração Sistema com muitos detalhes pode ser decomposto numa hierarquia de abstrações. Hierarquia permite que detalhes sejam inseridos de uma modo controlado Duas categorias : Agregação/decomposição Generalização/especialização
Aprendendo a pensar abstrações 1. Classificação/instanciação - construir uma abstração 2. Agregação/decomposição para construir uma hierarquia de agregação 3. Generalização/especialização para construir uma hierarquia de generalização
Classificação/instanciação Classificar significa agrupar objetos com estruturas e comportamento semelhantes. Instanciar objetos significa gerar novos Instanciar objetos significa gerar novos exemplares a partir de uma definição abstrata de um objeto genérico
Classificação/instanciação classe Aluno -nome:string -ra:int +verificarra(ra:int):boolean -ra:int Classificação Instanciação <<instance_of>> José:Aluno objeto (os objetos dependem da classe) <<instance_of>> Maria:Aluno objeto Um objeto é instância de apenas uma classe Uma classe pode possuir várias instâncias (objetos)
Classificação/instanciação Quantas classes você vê? Quantos objetos?
Generalização/Especialização É um tipo de : Implementa o conceito de herança de tipos Permite que todas as instancias de uma categoria específica tenham também as características de uma categoria mais abrangente.
Generalização/Especialização classe base Usuario -nome:string -cod:int +verificarcod(cod:int):boolean Generalização Especialização Aluno -serie:int +suspender():void Classe derivada Professor -temposerv:int +aposentar():void Classe derivada
Generalização/Especialização Objetos josé:usuario -nome= José :String -cod= ra123 :Int +verificarcod(cod:int):boolean maria:aluno -nome= Maria :String -cod= ra235 :Int -serie= 2 :int +verificarcod(cod:int):boolean +suspender():void elaine:professor -nome= Elaine :String -cod= rf345 :Int -temposerv:= 15 int +verificarcod(cod:int):boolean +aposentar():void
Agregação/Decomposição Agregação é um relacionamento estrutural entre o todo e suas partes. É-parte-de: implementa o conceito de decomposição hierárquica É um mecanismo que permite a montagem do todo a partir de suas partes
Agregação/Decomposição Biblioteca -identificador:string -endereço:string +listar usuarios():void +listar livros():void Agregação Decomposição Usuario -nome:string -cod:int +verificarcod(cod:int):boolean Livro -tombo:int -nome:string +buscar():void
Associação É um relacionamento estrutural que descreve um conjunto de links ; Agregação é um tipo especial de associação; Um usuário pode efetuar várias reservas e uma reserva é feita por apenas um usuário. Usuario -nome:string -cod:int +verificarcod(cod:int):boolean 1 * Reserva -codigo:int -data:date +efetuar():void +cancelar():void
Orientação a Objetos Programação Orientada a Objetos (POO) é um modelo de programação baseado em conceitos, tais como, objetos, classes, encapsulamento, herança, etc. Projeto Orientado a Objetos ( Object-Oriented Design ) é um modo de usar esses conceitos para estruturar e construir sistemas.
Metodologia Orientada a Objetos A abordagem orientada a objetos para construção de sistemas permite que um mesmo conjunto de conceitos e uma mesma notação sejam usados através de todo o ciclo de vida do software: análise, projeto e implementação.
Unified Modeling Language (UML) É um modelo de linguagem. Se uma pessoa quer conversar com outra sobre o projeto é através do modelo de linguagem que elas se entendem. Não é um método, pois não possui um processo. É a notação que o método usa para descrever o projeto.
Unified Modeling Language (UML) Sua especificação iniciou-se em 1994 pela Rational Software Corporation Tornou-se padrão do Object Management Group (OMG) em 1997 Se popularizou após a criação do Rational Unified Process (RUP), em 1998
Alguns Diagramas UML Diagrama de Casos de Uso Diagrama de Classes Diagrama de Seqüência Diagrama de Colaboração Diagrama de Atividades Diagrama de Estado...