OO Engenharia Eletrônica Orientação a Objetos - Programação em C++ Slides 9: Programação ou Implementação: uma fase da engenharia de software. Projeto (UML) e Programação (C++,...) Prof. Dr. Jean Marcelo SIMÃO DAELN / UTFPR
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 Análise e Projeto Implementação ou Codificação Testes Texto Estruturado Diagramas de Casos de Uso da UML. Diagramas de Requisitos da SysML. 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#. Testes utilizando o software gerado, utilizando registro em arquivos, usando debugger etc. Diagramas da UNIFIED MODELING LANGUAGE (UML) e SYSTEM MODELING LANGUAGE (SysML). Linguagem e Ambiente de Programação OO e eventualmente Ambiente de Testes. 3
Engenharia de Software OO Exemplos de Ferramentas Levantamento de Requisitos Análise e Projeto Implementação ou Codificação Testes Textos, Diagramas de Casos de Uso da UML etc Diagramas UML de: - CLASSES - Objetos - Seqüência -Colaboração -Estados -Atividades 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. Ferramentas CASE: StarUML, Jude, Rational Rose, System Architect, Together, VisualParadigm, Rhapsody... Ambiente de Programação OO (integráveis as Ferramentas CASE): Microsoft Visual C++.net Express Edition, Microsoft Visual C++.net, Microsoft Visual C++, Borland Builder C++, Borland C++, Dev C++, G++. 4
Bibliografias Bibliografias: - Pressman, R. S. Software Engineering A Practitioner s Approach. 6th Edition McGraw Hill (Higher Education). 2005. ISBN 0-07-28538-2. - RUMBAUGH, J.; JACOBSON, I.; BOOCH, G. The Unified Software Development Process. st Edition. Addison-Wesley. 2005. ISBN 0-200 20-5769-2. - RUMBAUGH, J.; JACOBSON, I.; BOOCH, G. The Unified Modeling Language Reference Manual. 2nd Edition. Addison-Wesley. 2005. ISBN 0-320 32-26797-4. - Bezerra, E. Princípios de Análise e Projeto de Sistemas com UML. Editora Campus. 2003. ISBN 85-352-032-6. Outras bibliografias: - GAMMA, E.; HELM, R.; Johnson, R.; Vlissides, J. Design Patterns: Elements of Reusable Object-oriented Software. Addison Wesley Longman, 995. - Largman, G. Applying UML and Patterns An Introduction to Object-Oriented Analysis and Design. Prentice Hall. 998. ISBN 0-3-748880-7. 5
Unified Modeling Language (UML) Diagrama de Classe 6
Análise-Projeto / Implementação Uma classe em UML Uma classe em C++ #diap: int #mesp: int #anop: int #idadep: int #nomep: char[30] #id: int Pessoa <<create>>+pessoa(diana: int, mesna: int, anona: int, nome: char) <<create>>+pessoa() <<destroy>>+pessoa() +Inicializa(diaNa: int, mesna: int, anona: int, nome: char): void +Calc_Idade(diaAT: int, mesat: int, anoat: int): void +Calc_Idade(anoAT: int): void +informaidade(): int #ifndef _PESSOA_H_ #define _PESSOA_H_ class Pessoa { protected: int diap; int mesp; int anop; int idadep; char nomep[ 30 ]; int id; public: Pessoa ( int diana, int mesna, int anona, char* nome = ""); Pessoa ( ); ~Pessoa ( ); void Inicializa (int diana, int mesna, int anona, char* nome = "" ); void Calc_Idade (int diaat, int mesat, int anoat ); void Calc_Idade ( int anoat ); int informaidade ( ); void seid ( int i ) { id = i; } int getid ( ) { return id; } void senome ( char* n ) { strcpy(nomep, n); } char* getnome ( ) { return nome; } }; #endif 7
Diagrama de Classe (de Análise ) - Herança #diap: int #mesp: int #anop: int #idadep: int #nomep: char[30] #id: int Pessoa RA = Registro Acadêmico <<create>>+pessoa(diana: int, mesna: int, anona: int, nome: char) <<create>>+pessoa() <<destroy>>+pessoa() +Inicializa(diaNa: int, mesna: int, anona: int, nome: char): void +Calc_Idade(diaAT: int, mesat: int, anoat: int): void +Calc_Idade(anoAT: int): void +informaidade(): int Professor <<create>>-professor(diana: int, mesna: int, anona: int, nome: char) <<create>>-professor() <<destroy>>-professor() +OndeTrabalho(): void +QualTrabalho(): void 8
Diag. Classes ( Análise ) Agregação (Fraca -Simples) Disciplina -nome: char[50] -area_conhecimento: char[50] <<create>>-disciplina(i: int, na: int, ac: char) <<create>>+disciplina() <<destroy>>-disciplina()..*..* <<create>>+() 9
Diagrama de Classes ( Análise ) - Associação Disciplina -nome: char[50] -area_conhecimento: char[50] <<create>>-disciplina(i: int, na: int, ac: char) <<create>>+disciplina() <<destroy>>-disciplina()..* Cursar..* <<create>>+() 0
Diagrama de Classes ( Análise ) Papeis associativos Disciplina -nome: char[50] -area_conhecimento: char[50] <<create>>-disciplina(i: int, na: int, ac: char) <<create>>+disciplina() <<destroy>>-disciplina() +Cursada..* Cursar +Cursa..* <<create>>+()
Realização Relação entre Relações Disciplina -nome: char[50] -area_conhecimento: char[50] <<create>>-disciplina(i:int, na:int, ac:char) <<create>>+disciplina() <<destroy>>-disciplina()..*..* +Cursada +Cursa..* Cursar..* <<create>>+() 2
Unified Modeling Language (UML) Diagrama de Classe (de "análise" e de "projeto") 3
Diagrama de Classe Associação Direcional -nome: char +setnome(n: char): void +getnome(): char FILIAR -nome: char +setnome(n: char): void +getnome(): char 4
Diagrama de Classe Associação Direcional <<create>>+() FILIAR -nome: char[00] +setnome(n: char): void +getnome(): char 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. 5
Diagrama de Classe (de Análise ) Associação Bidirecional <<create>>+()..* FILIAR -nome: char[00] +setnome(n: char): void +getnome(): char 6
Diagrama de Classe (de Análise ) Associação Bidirecional com Papeis <<create>>+() +estuda..* FILIAR +gerencia_estudo -nome: char[00] +setnome(n: char): void +getnome(): char 7
Diagrama de Classe (de Projeto ) Classe de Associação +set(d: *): void +get(): * +estudande..* FILIAR +gerencia_estudos -nome: char[00] +... +objtls: Lista +inclua(a: *): void +...() -quant: int -nome: char Lista +Lista(nome: char) ~Lista() +getquant(): int +setquant(int q): void +incluas(a: *): void 8
Diagrama de Classe (de Projeto ) Composição (Agregação Forte) +set(d: *): void +get(): * +estudande..* FILIAR +gerencia_estudos -nome: char[00] +... +objtls: Lista +inclua(a: *): void +...() -quant: int -nome: char Lista +Lista(nome: char) ~Lista() +getquant(): int +setquant(int q): void +incluas(a: *): void 9
Diagrama de Classe (de Projeto ) Esteriótipo +conhece +estudande +set(d: *): void..* +get(): * +listado..* CONHECER FILIAR +gerencia_estudos -nome: char[00] +... +objtls: Lista +inclua(a: *): void +...() ESTAR +lista 0.. -quant: int -nome: char Lista +Lista(nome: char) ~Lista() +getquant(): int +setquant(int q): void +incluas(a: *): void 20
Diagrama de Classe (de Projeto ) Realização +conhece +estudande..* +set(d: *): void +get(): * +listado..* CONHECER FILIAR +gerencia_estudos -nome: char[00] +... +objtls: Lista +inclua(a: *): void +...() +conhecido CONHECER 0.. +conhece 0..* El ESTAR +lista 0.. -quant: int -nome: char Lista +Lista(nome: char) ~Lista() +getquant(): int +setquant(int q): void +incluas(a: *): void 2
Diagrama de Classe (de Projeto ) Refinando Realização Relação Reflexiva +conhece +estudande +set(d: *): void..* +get(): * CONHECER FILIAR +gerencia_estudos -nome: char[00] +... +objtls: Lista +inclua(a: *): void +...() CONHECER 0.. +conhece +conhecido 0.. Conhecer Próximo El 0.. 0.. 0..*..* +listado Conhecer Anterior ESTAR 0.. Conhecer Primeiro 0.. 0.. Conhecer Atual 0.. 0.. 0.. +lista -quant: int -nome: char Lista +Lista(nome: char) ~Lista() +getquant(): int +setquant(int q): void +incluas(a: *): void 22
Diagrama de Classe (de Projeto ) Projeto Eliminando Análise - +set(d:*):void +get(): * +conhece CONHECER -nome: char[00] +... +objtls: Lista +inclua(a: *): void +...() CONHECER +conhecido 0.. +conhece 0.. Conhecer Próximo El 0..* 0.. 0.. Conhecer Anterior..* +listado ESTAR 0.. Conhecer Primeiro 0.. 0.. Conhecer Atual 0.. 0.. +lista 0.. -quant: int -nome: char Lista +Lista(nome: char) ~Lista() +getquant(): int +setquant(int q): void +incluas(a: *): void 23
Diagrama de Classe (de Projeto ) Projeto Eliminando Análise - 2 +conhece +set(d: *): void +get(): * CONHECER -nome: char[00] +... +objtls: Lista +inclua(a: *): void +...() +conhecido CONHECER Lista 0.. +conhece Conhecer Próximo 0.. 0..* El 0.. 0.. 0.. Conhecer Anterior Conhecer Primeiro 0.. Conhecer Atual 0.. 0.. 0.. -quant: int -nome: char +Lista(nome: char) ~Lista() +getquant(): int +setquant(int q): void +incluas(a: *): void 24
Diagrama de Classe (de Projeto ) Projeto Eliminando Análise - 3 +conhece +set(d: *): void +get(): * CONHECER -nome: char[00] +... +objtls: Lista +inclua(a: *): void +...() +conhecido 0.. Conhecer Próximo CONHECER 0..+conhece El 0.. 0.. 0.. Conhecer Primeiro 0.. 0.. Conhecer Atual 0.. 0.. Conhecer Anterior -quant: int -nome: char Lista +Lista(nome: char) ~Lista() +getquant(): int +setquant(int q): void +incluas(a: *): void 25
Diagrama de Classe (de Análise ) Composição (Agregação Forte) -nome: char[00] +setnome(n: char): void +getnome(): char..* Disciplina -nome: char[50] -area_conhecimento: char[50] <<create>>-disciplina(i: int, na: int, ac: char*) <<create>>+disciplina() <<destroy>>-disciplina() 26
Diagrama de Classe (de Projeto ) Composição (Agregação Forte) -nome: char[00] +... +objtls: Lista +inclua(a: *): void +...() Conhecer..* Disciplina -nome: char[00] -area_conhecimento: char[00] <<create>>-disciplina(i: int, na: int, ac: char*) <<destroy>>-disciplina() +set(d: *): void +get(): * +set(a: ): void +listes2(): void CONHECER 0..* 0..* CONHECER PROXIMO..* ListaDisciplina ElDisciplina 0..* 0..* 0..* 0..* CONHECER PRIMEIRO 0..* 0..* CONHECER ATUAL 0..* CONHECER ANTERIOR 27