Universidade Tecnolgica Federal do Paran UTFPR Campus Curitiba
Universidade Tecnológica Federal do Paraná – UTFPR – Campus Curitiba Orientação a Objetos - Paradigma Orientado a Objetos (POO) Slides 9: Modelagem Orientada a Objetos em Unified Modeling Language (UML) – Diagrama de Classes -------------------------Análise/Projeto em UML visando a Programação Orientada a Objetos (C++, . . . ) Prof. Dr. Jean Marcelo SIMÃO – DAINF / UTFPR 1
Engenharia de Software Visão Clássica Levantamento de Requisitos Análise e Projeto Implementação ou Codificação Testes 2
Engenharia de Software OO Exemplos de Técnicas Levantamento de Requisitos Texto Estruturado Diagramas de Requisitos da Sys. ML. -----------Diagramas de Casos de Uso da UML. Análise e Projeto Implementação ou Codificação Diagramas UML de: - CLASSES. - Objetos/Seqüência. - Colaboração. - Estados. - Atividades. - Componentes. Código em Ling. de Programação OO, por exemplo C++, Java ou C#. Diagramas da UNIFIED MODELING LANGUAGE (UML) e SYSTEM MODELING LANGUAGE (Sys. ML). Testes utilizando o software gerado, utilizando registro em arquivos, usando debugger etc. Linguagem e Ambiente de Programação OO e eventualmente Ambiente de Testes. 3
Engenharia de Software OO Exemplos de Ferramentas Implementação ou Codificação Levantamento de Requisitos Análise e Projeto Textos Estruturados, Textos Tabelados, Diagramas etc Diagramas UML de: - CLASSES - Objetos - Seqüência -Colaboração -Estados -Atividades Ferramentas CASE: Star. UML, Jude, Rational Rose, System Architect, Together, Visual. Paradigm, Rhapsody. . . Código em Linguagem de Programação OO, por exemplo C++, Java ou C# Testes utilizando o software gerado, utilizando registro em arquivos, usando debugger. Ambiente de Programação OO (integráveis as Ferramentas CASE): Microsoft Visual Studio, Microsoft Visual C++. net Express Edition, Microsoft Visual C++. net, Microsoft Visual C++, Borland Builder C++, Borland C++, Code. Blocks, Dev C++, G++. 4
Bibliografias: - Pressman, R. S. Software Engineering – A Practitioner’s Approach. 6 th Edition Mc. Graw Hill (Higher Education). 2005. ISBN 0 -07 -285318 -2. - RUMBAUGH, J. ; JACOBSON, I. ; BOOCH, G. The Unified Software Development Process. 1 st Edition. Addison-Wesley. 2005. ISBN 0 -201 -57169 -2. - RUMBAUGH, J. ; JACOBSON, I. ; BOOCH, G. The Unified Modeling Language Reference Manual. 2 nd Edition. Addison-Wesley. 2005. ISBN 0 -321 -26797 -4. - Bezerra, E. Princípios de Análise e Projeto de Sistemas com UML. Editora Campus. 2003. ISBN 85 -352 -1032 -6. Outras bibliografias: - GAMMA, E. ; HELM, R. ; Johnson, R. ; Vlissides, J. Design Patterns: Elements of Reusable Object-oriented Software. Addison Wesley Longman, 1995. - Largman, G. Applying UML and Patterns – An Introduction to Object-Oriented Analysis and Design. Prentice Hall. 1998. ISBN 0 -13 -748880 -7. 5
Unified Modeling Language (UML) Diagrama de Classe 6
Análise-Projeto / Implementação Uma classe em UML Uma classe em C++ #ifndef _PESSOA_H_ #define _PESSOA_H_ class Pessoa { protected: protected int dia. P; int mes. P; int ano. P; int idade. P; char nome. P[ 30 ]; int id; public: Pessoa ( int dia. Na, int mes. Na, int ano. Na, char* nome = ""); Pessoa ( ); ~Pessoa ( ); void Inicializa (int dia. Na, int mes. Na, int ano. Na, char* nome = "" ); void Calc_Idade (int dia. AT, int mes. AT, int ano. AT ); void Calc_Idade ( int ano. AT ); int informa. Idade ( ); void se. Id ( int i ) { id = i; } int get. Id ( ) { return id; } void se. Nome ( char* n ) { strcpy(nome. P, n); } char* get. Nome ( ) { return nome; } }; #endif 7
Diagrama de Classe (de “Análise”) - Herança 8
Diag. Classes (“Análise”) Agregação (Fraca -Simples) 9
Diagrama de Classes (“Análise”) - Associação 10
Diagrama de Classes (“Análise”) – Papeis associativos 11
Realização – Relação entre Relações 12
Realização – Relação entre Relações Aluno Disciplina -RA: int -id: int -nome: char[150] -area_conhecimento: char[150] <<create>>-Disciplina(i: int, na: int, ac: char*) <<create>>+Disciplina() +Cursam <<destroy>>-Disciplina() +set. Id(i: int): void +get. Id(): int 1. . * +set. Nome(n: char*): void +get. Nome(): char* +São Cursadas Cursar <<create>>+Aluno(i: int) <<create>>+Aluno(dia. Na: int, mes. Na: int, ano. Na: int, nome. Na: char*) <<destroy>>+Aluno() +set. RA(ra: int): void +get. RA(): int 1. . * 13
Unified Modeling Language (UML) Diagrama de Classe (de "análise" e de "projeto") 14
Diagrama de Classe Associação Direcional 15
Diagrama de Classe Associação Direcional Aqui seria um diagrama de classes no escopo da ‘análise’, pois contém apenas as informações essenciais das classes e de seus relacionamentos. 16
Diagrama de Classe (de “Análise”) Associação Bidirecional 17
Diagrama de Classe (de “Análise”) Associação Bidirecional com Papeis Aluno -RA: int <<create>>+Aluno(i: int) <<create>>+Aluno(dia. Na: int, mes. Na: int, ano. Na: int, nome. Na: char*) +gerencia_estudo <<destroy>>+Aluno() 1. . * +set. RA(ra: int): void CONHECER +get. RA(): int Departamento -id: int -nome: char[100] +estuda <<create>>+Departamento(i: int) <<destroy>>+Departamento() 1 +get. Id(): int +set. Nome(n: char): void +get. Nome(): char 18
Diagrama de Classe (de “Projeto”) Classe de Associação Aluno Departamento -RA: int <<destroy>>+Aluno() <<create>>+Aluno(i: int) +set. RA(ra: int): void +get. RA(): int +set. Departamento(d: Departamento*): void +get. Departamento(): Departamento* +set. Id(i: int): void 1. . * +get. Id(): int -id: int -nome: char[100] -. . . -objt. LAlunos: Lista. Alunos CONHECER 1 <<create>>+Departamento(i: int) <<destroy>>+Departamento() +get. Id(): int +set. Nome(n: char*): void +get. Nome(): char* +inclua. Aluno(a: Aluno*): void +liste. Alunos(): void +. . . () <<Projeto>> Lista. Alunos -quant: int <<create>>+Lista. Aluno() <<destroy>>+Lista. Alunos() +get. Quant(): int +set. Quant(int q): void +inclua. Alunos(a: Aluno*): void +liste. Alunos(): void 19
Diagrama de Classe (de “Projeto”) Composição (Agregação Forte) Aluno Departamento -RA: int <<destroy>>+Aluno() <<create>>+Aluno(i: int) +set. RA(ra: int): void +get. RA(): int +set. Departamento(d: Departamento*): void +get. Departamento(): Departamento* 1. . * +set. Id(i: int): void +get. Id(): int -id: int -nome: char[100] -. . . -objt. LAlunos: Lista. Alunos CONHECER 1 <<create>>+Departamento(i: int) <<destroy>>+Departamento() +get. Id(): int +set. Nome(n: char*): void +get. Nome(): char* +inclua. Aluno(a: Aluno*): void +liste. Alunos(): void +. . . () 1 <<Projeto>> Lista. Alunos -quant: int <<create>>+Lista. Aluno() <<destroy>>+Lista. Alunos() +get. Quant(): int +set. Quant(int q): void +inclua. Alunos(a: Aluno*): void +liste. Alunos(): void 1 20
Diagrama de Classe (de “Projeto”) Estereótipo 1 Aluno Departamento -RA: int <<destroy>>+Aluno() <<create>>+Aluno(i: int) +set. RA(ra: int): void +get. RA(): int +set. Departamento(d: Departamento*): void 1. . * +get. Departamento(): Departamento* +set. Id(i: int): void +get. Id(): int -id: int -nome: char[100] +. . . +objt. LAlunos: Lista. Alunos CONHECER 1 1. . * <<create>>+Departamento(i: int) <<destroy>>+Departamento() +get. Id(): int +set. Nome(n: char*): void +get. Nome(): char* +inclua. Aluno(a: Aluno*): void +liste. Alunos(): void +. . . () 1 ESTAR <<Projeto>> Lista. Alunos 1 -quant: int -nome: char 1 +Lista. Aluno(nome: char) ~Lista. Aluno() +get. Quant(): int +set. Quant(int q): void +inclua. Alunos(a: Aluno*): void +liste. Alunos(): void 21
Diagrama de Classe (de “Projeto”) Realização Aluno Departamento CONHECER -RA: int 1 <<destroy>>+Aluno() <<create>>+Aluno(i: int) +set. RA(ra: int): void +get. RA(): int +set. Departamento(d: Departamento*): void +get. Departamento(): Departamento* 1. . * +set. Id(i: int): void +get. Id(): int 1 1 CONHECER -id: int -nome: char[100] -. . . -objt. LAlunos: Lista. Alunos <<create>>+Departamento(i: int) <<destroy>>+Departamento() +get. Id(): int +set. Nome(n: char*): void +get. Nome(): char* +inclua. Aluno(a: Aluno*): void +liste. Alunos(): void +. . . () 1. . * 1 ESTAR 1 <<Projeto>> Lista. Alunos -quant: int 1 <<create>>+Lista. Aluno() <<destroy>>+Lista. Alunos() +get. Quant(): int +set. Quant(int q): void +inclua. Alunos(a: Aluno*): void +liste. Alunos(): void 22
Diagrama de Classe (de “Projeto”) Realização Aluno CONHECER -RA: int Departamento 1 1 <<destroy>>+Aluno() <<create>>+Aluno(i: int) +set. RA(ra: int): void +get. RA(): int +set. Departamento(d: Departamento*): void +get. Departamento(): Departamento* +set. Id(i: int): void +get. Id(): int CONHECER 1 1. . * -id: int -nome: char[100] -. . . -objt. LAlunos: Lista. Alunos <<create>>+Departamento(i: int) <<destroy>>+Departamento() +get. Id(): int +set. Nome(n: char*): void +get. Nome(): char* +inclua. Aluno(a: Aluno*): void +liste. Alunos(): void +. . . () 1 1 ESTAR 1 CONHECER <<Projeto>> Lista. Alunos 1 -quant: int * <<Projeto>> El. Aluno 1. . * 1 <<create>>+Lista. Aluno() <<destroy>>+Lista. Alunos() +get. Quant(): int +set. Quant(int q): void +inclua. Alunos(a: Aluno*): void +liste. Alunos(): void 23
Diagrama de Classe (de “Projeto”) “Refinando Realização” – “Relação Reflexiva” Departamento Aluno CONHECER -RA: int <<destroy>>+Aluno() <<create>>+Aluno(i: int) +set. RA(ra: int): void +get. RA(): int +set. Departamento(d: Departamento*): void +get. Departamento(): Departamento* +set. Id(i: int): void +get. Id(): int 1 1 1. . * 1 CONHECER 1. . * ESTAR -id: int -nome: char[100] -. . . -objt. LAlunos: Lista. Alunos <<create>>+Departamento(i: int) <<destroy>>+Departamento() +get. Id(): int +set. Nome(n: char*): void +get. Nome(): char* +inclua. Aluno(a: Aluno*): void +liste. Alunos(): void +. . . () 1 1 1 CONHECER 1 1. . * * <<Projeto>> El. Aluno 0. . 1 Conhecer Próximo Conhecer Primeiro Conhecer Atual 0. . 1 <<Projeto>> Lista. Alunos -quant: int <<create>>+Lista. Aluno() <<destroy>>+Lista. Alunos() +get. Quant(): int 0. . 1 +set. Quant(int q): void +inclua. Alunos(a: Aluno*): void +liste. Alunos(): void 0. . 1 1 0. . 1 Conhecer Anterior 24
Diagrama de Classe (de “Projeto”) “Projeto – ‘Eliminando’ Análise” - 1 Aluno Departamento -RA: int <<destroy>>+Aluno() <<create>>+Aluno(i: int) +set. RA(ra: int): void +get. RA(): int +set. Departamento(d: Departamento*): void +get. Departamento(): Departamento* +set. Id(i: int): void +get. Id(): int CONHECER 1 1 -id: int -nome: char[100] -. . . -objt. LAlunos: Lista. Alunos <<create>>+Departamento(i: int) <<destroy>>+Departamento() +get. Id(): int +set. Nome(n: char*): void +get. Nome(): char* +inclua. Aluno(a: Aluno*): void +liste. Alunos(): void +. . . () ESTAR 1. . * 1 1 1 CONHECER 1 -quant: int 1. . * * <<Projeto>> El. Aluno 0. . 1 Conhecer Primeiro 0. . 1 Conhecer Próximo 0. . 1 <<Projeto>> Lista. Alunos Conhecer Atual 0. . 1 <<create>>+Lista. Aluno() <<destroy>>+Lista. Alunos() 0. . 1 +get. Quant(): int +set. Quant(int q): void +inclua. Alunos(a: Aluno*): void +liste. Alunos(): void 1 Conhecer Anterior 25
Diagrama de Classe (de “Projeto”) “Projeto – ‘Eliminando’ Análise” - 2 Aluno Departamento -RA: int <<destroy>>+Aluno() 1 <<create>>+Aluno(i: int) +set. RA(ra: int): void +get. RA(): int +set. Departamento(d: Departamento*): void +get. Departamento(): Departamento* +set. Id(i: int): void +get. Id(): int CONHECER 1 -id: int -nome: char[100] -. . . -objt. LAlunos: Lista. Alunos <<create>>+Departamento(i: int) <<destroy>>+Departamento() +get. Id(): int +set. Nome(n: char*): void +get. Nome(): char* +inclua. Aluno(a: Aluno*): void +liste. Alunos(): void +. . . () 1 1 CONHECER 1 * 1. . * 0. . 1 <<Projeto>> El. Aluno 0. . 1 Conhecer Primeiro Conhecer Atual 0. . 1 Conhecer Próximo 0. . 1 <<Projeto>> Lista. Alunos -quant: int 1 <<create>>+Lista. Aluno() 0. . 1 <<destroy>>+Lista. Alunos() +get. Quant(): int +set. Quant(int q): void +inclua. Alunos(a: Aluno*): void +liste. Alunos(): void Conhecer Anterior 26
Diagrama de Classe (de “Projeto”) “Projeto – ‘Eliminando’ Análise” - 3 Aluno Departamento -RA: int <<destroy>>+Aluno() <<create>>+Aluno(i: int) +set. RA(ra: int): void 1 +get. RA(): int +set. Departamento(d: Departamento*): void +get. Departamento(): Departamento* +set. Id(i: int): void +get. Id(): int CONHECER 1 -id: int -nome: char[100] -. . . -objt. LAlunos: Lista. Alunos <<create>>+Departamento(i: int) <<destroy>>+Departamento() +get. Id(): int +set. Nome(n: char*): void +get. Nome(): char* +inclua. Aluno(a: Aluno*): void +liste. Alunos(): void +. . . () 1 1 CONHECER * <<Projeto>> El. Aluno <<Projeto>> Lista. Alunos 0. . 1 Conhecer Primeiro Conhecer Atual 0. . 1 Conhecer Próximo 0. . 1 Conhecer Anterior 0. . 1 -quant: int 0. . 1 <<create>>+Lista. Aluno() <<destroy>>+Lista. Alunos() +get. Quant(): int +set. Quant(int q): void +inclua. Alunos(a: Aluno*): void +liste. Alunos(): void 1 27
Diagrama de Classe (de “Análise”) Composição (Agregação Forte) 28
Diagrama de Classe (de “Projeto”) Composição (Agregação Forte) Disciplina Departamento -id: int -nome: char[100] -objt. LDisciplinas: Lista. Dsicplinas -objt. LAlunos: Lista. Alunos <<create>>+Departamento(i: int) <<destroy>>+Departamento() +get. Id(): int +set. Nome(n: char*): void +get. Nome(): char* +inclua. Aluno(a: Aluno*): void +liste. Alunos(): void +. . . () 1 Conhecer -id: int -nome: char[100] -area_conhecimento: char[100] -p. Depto: Departamento* 1. . * <<create>>-Disciplina(i: int, na: int, ac: char*) <<destroy>>-Disciplina() +set. Id(i: int): void +get. Id(): int +set. Nome(n: char*): void +get. Nome(): char* +set. Departamento(d: Departamento*): void +get. Departamento(): Departamento* +set. Aluno(a: Aluno): void +liste. Alunos(): void +liste. Alunos 2(): void 1. . * 1 1 1 CONHECER PROXIMO CONHECER * 0. . 1 <<Projeto>> El. Disciplina <<Projeto>> Lista. Disciplinas 1 0. . 1 CONHECER PRIMEIRO 0. . 1 CONHECER ANTERIOR CONHECER ATUAL 29
Star. UML • Versão usada da Ferramenta CASE STAR UML: – Version 5. 0. 2. 1570 30
- Slides: 30