1.22k likes | 1.34k Views
Orientação a Objetos. Edson E. Scalabrin, Marcos A. H. Shmeil e Alcides Calsavara {scalabrin, shm, alcides}@ppgia.pucpr.br Telefone: 0xx-41-330-1669. Introdução. Modelagem orientada a objetos Permite representar diretamente as entidades do mundo real e as relações entre essas entidades.
E N D
Orientação a Objetos Edson E. Scalabrin, Marcos A. H. Shmeil eAlcides Calsavara{scalabrin, shm, alcides}@ppgia.pucpr.brTelefone: 0xx-41-330-1669
Introdução • Modelagem orientada a objetos • Permite representar diretamente as entidades do mundo real e as relações entre essas entidades
Introdução (continuação) Quais são os objetos presentes no cenário e as relações entre eles ?
Introdução (continuação) Modelagem orientada a objetos • Permite representar diretamente as entidades do mundo real em ambientes informatizados, sem a necessidade de deformar ou de decompor os mesmos. • Relacionamentos entre entidades : • generalização : é-um • agregação : parte-de • associação : relacionamento qualquer
Introdução (continuação) Análise Usuário Geramsolicitações Desenvolvedores Gerentes Enunciado doProblema Entrevistas com o usuário ConstróiModelos Conhecimento do domínio Experiência do mundo real Modelo de Objetos Modelo DinâmicoModelo Funcional Projeto
Introdução (continuação) • O modelo objeto • especifica o que acontece a quem • representa a estrutura estática de um sistema • O modelo dinâmico • especifica quando algo deve acontece • representa a estrutura de controle de um sistema • O modelo funcional: • descreve os cálculos executados em um sistema • especifica o que acontece
Bibliografia Básica • James Rumbaugh et al. Modelagem e Projetos Baseados em Objetos. Editora Campus, 1994. ISBN 85-7001-8410-X. • Grady Booch. Object-Oriented Analysis and Design with Applications. Second Edition. Addison-Wesley, 1994. ISBN 0-8053-5340-2. • Ivar Jacobson. Object-Oriented Software Engineering - a Use Case Driven approach. Addison-Wesley, 1996. ISBN 0-201-54435-0. • Peter Coad. Objet Models - Strategies, Patterns & Applications. Prentice-Hall, 1997. ISBN 0-13-840117-9. • Dennis de Champeaux. Object-Oriented Development Process and Metrics. Prentice-Hall, 1997. ISBN 0-13-099755-2. • Gregory Satir and Doug Brown. C++ : The Core Language. O’Reilly & Associates, 1995. ISBN 1-56592-116-X.
Bibliografia Complementar • Jag Sodhi and Prince Sodhi. Object-Oriented Methos for Software Development. McGraw Hill, 1996. ISBN 0-07-059574-7. • Chris Zimmermann (Ed). Advances in Object-Oriented Metalevel Architectures and Reflection. CRC Pr, 1996. ISBN 0-84-932663-X. • Jonathan Pletzke. Advanced Smalltalk.. John Wiley & Sons, 1996. ISBN 0-47-116350-3. • Al Stevens. C++ Database Development. Mis Pr, 1994. ISBN 1-55-828357-9. • Grady Booch and Ed Eykholt (Eds). The Best of Booch: Designing Strategies for Object Technology. Prentice-Hall, 1996. ISBN 0-13-739616-3.
Ementa • Conceituação de OO • Método para modelagem OO • Modelagem de Objetos • Modelagem Dinâmica • Modelagem Funcional • Programação OO
Conceitos de OO Modelagem de Objetos
Vantagens • Independência de implementação • Esconder detalhes • Flexibilidade • Clareza conceitual • Modularização • Reusabilidade
Áreas de aplicação • Linguagens de programação • Bancos de dados • Sistemas operacionais • Sistemas distribuídos • Interface gráfica • Métodos de modelagem de sistemas • Métodos formais: Z++ • Empacotamento de software: classes, componentes • Integração de sistemas: CORBA, DCOM • Reflexão: tolerância a falhas, reconfiguração
Conceitos fundamentais • Objeto • Identidade • Encapsulamento • Classificação/Instanciação • Generalização/Especialização • Herança • Polimorfismo
Objeto • Um conceito, uma abstração, algo com limites e significados definidos para o problema em questão • Um objeto do mundo real • Um conjunto de atributos (estado) e métodos (comportamento) • Uma instância de uma classe
Identidade • Característica peculiar de um objeto que denota a existência em separado do objeto, mesmo que ele tenha os mesmos valores de atributos de outro objeto • Uma identificação única de cada objeto
Encapsulamento • Técnica de modelagem e implementação que separa os aspectos externos de um objeto dos detalhes internos de implementação do mesmo objeto • Os atributos (estado) de objeto só é modificável a partir de seus métodos (interface)
Atributo • Propriedade denominada de uma classe, que descreve o valor de um dado contido por cada objeto da classe • Todo atributo tem um tipo e, opcionalmente, um valor default inicial • Cada instância de uma classe possui todos os atributos definidos pela classe
Método (ou Operação) • Função ou transformação que pode ser aplicada aos objetos de uma classe • Todo método definido para uma classe pode ser aplicado a qualquer instância daquela classe • Um método tem um nome, uma lista de argumentos, um tipo de retorno e uma implementação
Classe • Descrição de um grupo de objetos com propriedades semelhantes, comportamento, relacionamentos e semântica comuns • Instância: um objeto descrito por uma classe
Exemplo de classe Nome da classe MOTO Marca: String cor: String estado: boolean Atributos + tipos ligaMotor(), mostraAtributos() Métodos
Exemplo de classe definida em Java class MOTO{ private String marca, cor; boolean estadoMotor; void ligaMotor() { if (estadoMotor == true) System.out.println(“O motor já esta ligado”); else { estadoMotor = true; System.out.println(“Agora o motor já esta ligado”); } } // fim do método ligaMotor void mostraAtributos() { System.out.println(“Cor: “ + cor+ “ Marca: “ + marca + “Estado: “ + estadoMotor); }
Exemplo de classe definida em Java (continuação) class MOTO{ . . . public static void main ( String args[] ){ MOTO m = new MOTO(); m.marca = “Yamaha RZ350”; m.cor = “amarela”; m.mostraAtributos(); m.ligaMotor(); m.mostraAtributos(); m.ligaMotor(); } // fim do método main } // fim da classe MOTO
Generalização • Relacionamento entre uma classe e uma ou mais versões refinadas ou especializadas da classe • Especialização: relacionamento inverso • Superclasse: versão mais abstrata de outra classe, a subclasse • Subclasse: versão mais refinada de outra classe, a superclasse
Herança • Mecanismo baseado em objetos que permite que as classes compartilhem atributos e operações baseados em um relacionamento, geralmente generalização • Uma subclasse herda atributos e métodos da superclasse
Polimorfismo • Assume muitas formas • A propriedade segundo a qual uma operação (método) pode comportar-se diferentemente em classes diferentes • A subclasse redefine a implementação de um método herdado da superclasse • Onde se espera uma instância de um certa classe pode aparecer uma instância de qualquer subclasse daquela classe
Exemplo de herança e polimorfismo BOTÃO Estado: boolean cor: Cores x: int y: int desenhe(), aperte(), desaperte(), pegaEstado(), mova(float x1, float x2) BOTÃO QUADRADO BOTÃO REDONDO diagonal : int raio : int desenhe() desenhe()
Implantação da classe Botão class Botao { boolean estado; int cor; float x, y; public Botao(int cor) { estado = true; cor = 0; x = y = 0; } public void aperte() {estado = true; } public void desaperte() {estado = false; } public boolean pegaEstado() { return estado; } public void desenhe() {} public void mova( float x1, float y1) { x = x1; y = y1; } }
Implantação da classe Botão Quadrado class BotaoQuadrado extends Botao { float diagonal; public BotaoQuadrado(int cor, float dia){ super( cor ); diagonal = dia; } public void desenhe(){ System.out.println("Desenhe Botão Quadrado"); } }
Implantação da classe Botão Redondo class BotaoRedondoextendsBotao { float raio; public BotaoRedondo(int cor, float r){ super( cor ); raio = r; } public void desenhe(){ System.out.println("Desenhe Botão Redondo"); } }
Implantação da classe Janela class Janela { public static void main( String args[] ) { BotaoQuadrado bq = new BotaoQuadrado(1, (float)4.5); bq.desenhe(); BotaoRedondo br = new BotaoRedondo(1, (float)5.0); br.desenhe(); } }
Exercício Escreva um diagrama de classes para estas 3 (três) instâncias. Não é necessário incluir métodos. (Aparelho de troca de calor) nome = E302 fabricante = Brown peso = 5000 kg preço = $20000 área da superfície diâmetro do tubo = 2 cm comprimento do tubo = 6 m pressão do tubo = 15 atm pressão da concha = 1,7 atm (Tanque de teto flutuante) nome = T111 fabricante = Simplex peso = 10000 kg preço = $50000 volume = 400000 L pressão = 1,1 atm diâmetro = 8 m altura = 9m (Bomba de diafragma) nome = P101 fabricante = Simplex peso = 100 kg preço = $5000 pressão de sucção = 1,1 atm presssão de descarga = 3,3 atm taxa de fluxo = 300 I/h material do diafragma = Teflon
Exemplos/Exercícios • Componentes de uma interface gráfica: botões, menus, barras, ... • Pessoas: aluno, professor, secretária, reitor • Veículos: bicicleta, veleiro, carro, caminhão, avião, planador, motocicleta, cavalo • Habitações: tenda, caverna, barraco, garagem, celeiro, casa, arranha-céu
Classe A Classe A Classe A Classe A Classe A Classe A Classe A Classe A Classe A Classe A Classe A Classe A Notação: Multiplicidade e Ordenação UML OMT 1 0..* 0..1 1..* 1+ 2-5,10 2-5,10 0..* {ordenado} {ordenado}
Ligação • Uma conexão física ou conceitual entre objetos • Exemplo: O país Brasil tem como capital a cidade de Brasília. • Exemplo: O funcionário João trabalha na empresa Transamérica S.A. • Exemplo: O artigo “OO Solutions” foi publicado na conferencia OOPSLA’99.
Associação • Relacionamento entre instâncias de duas ou mais classes descrevendo um grupo de ligações com estrutura e semântica comuns. • Exemplo: Um país tem como capital uma cidade. • Exemplo: Um funcionário trabalha numa empresa.
Agregação • Forma especial de associação, entre o todo e suas partes, na qual o todo é composto pelas partes • Também chamada de herança horizontal • Exemplo: Um artigo é publicado em uma conferência, isto é, o artigo faz parte da conferência (ou dos anais da conferência).
Multiplicidade e Papel • Multiplicidade: Número de instâncias de uma classe que podem se relacionar a uma única instância de um classe associada (ou agregada). • Papel: nome que identifica inequivocamente uma extremidade de uma associação.
Classe PessoaDiagrama de instâncias Cônjuge (Pessoa) uma avó (Pessoa) um avô mãe pai filho filho (Pessoa) uma tia (Pessoa) seu pai (Pessoa) sua mãe Irmão Cônjuge pai mãe mãe filho filho (Pessoa) um primo (Pessoa) você Primo filho
Classe PessoaDiagrama de instâncias Cônjuge (Pessoa) Ederiges (Pessoa) Casemiro mãe pai filho filho (Pessoa) Fátima (Pessoa) Emílio (Pessoa) Vitória Irmão Cônjuge pai mãe mãe filho filho (Pessoa) Marcelo (Pessoa) Edson Primo filho
Atributo de Ligação • Um valor de dados presente em cada ligação (nível de instâncias) de uma associação (nível de classes) • Uma propriedade da ligação entre objetos, e não dos objetos ligados, propriamente ditos • Exemplos: permissão de acesso que um usuário possui para a um arquivo; o salário de uma pessoa em um emprego em uma companhia
Atributo de Ligação Exemplo: Muitos para Muitos Arquivo Usuário Acessível por String : nome String : nome Integer : permissão /etc/termcap ( leitura ) John Doe /etc/termcap ( leitura-escrita ) Mary Brown /usr/doe/.login ( leitura-escrita ) John Doe
Atributo de Ligação Exemplo: Um para Muitos Pessoa Empresa Trabalha-para String : nome String : telefone String : nome String : endereço chefe Float : salário String : cargo trabalhador Gerencia Float : desempenho
Associação como uma Classe • Cada ligação de uma associação é uma instância de uma classe • Uma ligação é um objeto, com atributos e métodos • Útil quando ligações podem participar em associações com outros objetos • Útil quando ligações sofrem operações • Exemplo: autorização para usuários em estações de trabalho
Associação como uma Classe Exemplo Pessoa Estação Trabalho Autorizado String : nome String : telefone String : IP Usuário Integer : prioridade Integer : privilégios IniciarSessao() : void Diretório String : nome Diretório básico
Associação Ternária • Representa ligações entre 3 objetos • Não pode ser dividida em associações binárias sem que haja perda de informações • Associações de grau maior que 3 são raras e devem ser evitadas devido a complexidade de entendimento e implementação • Exemplo: pessoas que são programadoras usam linguagens de programação em projetos
Associação Ternária + Papel Pessoa Veículo objeto comprador String : nome String : telefone String : marca String : cor 1. .* 1 vendedor 1 Concessionária Compra String : nome String : endereço Data : data
Associação Ternária + Papel Pessoa Veículo objeto vendedor String : nome String : telefone String : marca String : cor 1. .* 1 comprador 1 Concessionária Compra String : nome String : endereço Data : data
Pessoa Banco Empréstimo Carro Empresa nome : String nome : String ID proprietário : ? ID proprietário : ? nome : String idade : Int ID banco : ? ID cliente : ? ID carro : ? ID Empresa : ? ID empregador 1 : ? número de conta : Int tipo proprietário : ? ID empregador 2 : ? ID banco : ? modelo : String ID empregador 3 : ? juro : Real ano : Int endereço : String saldo atual : Real ID Pessoa : ? tipo proprietário : ? Exercício • Estas classes possuem atributos que são ponteiros para outras classes de objetos. Estes ponteiros podem ser substituídos por associações. Considerando que: • cada pessoa pode ter até três empregos em empresas diferentes. • cada pessoa, carro, empresa e banco possui o seu próprio identificador (ID). • o proprietário de um carro pode ser: uma pessoa, uma empresa ou um banco. • em um empréstimo, o carro é o objeto penhorado (ou comprado). • Prepare um diagrama de classes, onde os ponteiros são substituídos por relações. Pode haver a necessidade de acrescentar uma ou mais classes. Elimine todos os ID. Certos atributos podem ser transformados em discriminantes *. • * Um discriminante é um atributo do tipo enumeração que indica que uma propriedade de um objeto tornou-se abstrata através de uma relação de generalização.
Pessoa Banco Empréstimo Carro Empresa nome : String nome : String ID proprietário : ? ID proprietário : ? nome : String idade : Int ID banco : ? ID cliente : ? ID carro : ? ID Empresa : ? ID empregador 1 : ? número de conta : Int tipo proprietário : ? ID empregador 2 : ? ID banco : ? modelo : String ID empregador 3 : ? juro : Real ano : Int endereço : String saldo atual : Real ID Pessoa : ? tipo proprietário : ? Possui Proprietário Veículo beneficiário String : nome String : modelo Integer : ano penhor Empréstimo Pessoa Empresa Banco Integer : conta Float : juros Float : saldo cedente Integer : idade String : endereço Emprega Exercício Resposta
Ordenação em Associações • Em alguns casos o conjunto de objetos associados a um certo objeto apresenta uma ordem • A palavra "ordenado" deve aparecer junto à multiplicade "muitos" de uma associação para indicar que existe uma ordem entre os objetos ligados • Exemplos: as janelas visíveis em uma tela possuem uma ordem; os vértices de um polígono