Orientação a Objetos Programação em C+++9-2018-04-05.pdf · 4 Engenharia de Software OO...
-
Upload
duongthuan -
Category
Documents
-
view
217 -
download
0
Transcript of Orientação a Objetos Programação em C+++9-2018-04-05.pdf · 4 Engenharia de Software OO...
1
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++, ...)
OO – Engenharia Eletrônica
Prof. Dr. Jean Marcelo SIMÃO – DAELN / UTFPR
2
Engenharia de Software
Levantamento
de
Requisitos
Análise
e
Projeto
Implementação
ou
Codificação
Testes
Visão Clássica
3
Engenharia de Software OO
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.
Exemplos de Técnicas
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.
4
Engenharia de Software OO
Levantamento
de
Requisitos
Análise
e
Projeto
Implementação
ou
Codificação
Testes
Textos, Diagramas de
Casos de Uso da UML etc
Exemplos de Ferramentas
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++.
5
Bibliografias:
- Pressman, R. S. Software Engineering – A Practitioner’s Approach. 6th Edition
McGraw Hill (Higher Education). 2005. ISBN 0-07-285318-2.
- RUMBAUGH, J.; JACOBSON, I.; BOOCH, G. The Unified Software Development
Process. 1st Edition. Addison-Wesley. 2005. ISBN 0-201-57169-2.
- RUMBAUGH, J.; JACOBSON, I.; BOOCH, G. The Unified Modeling Language
Reference Manual. 2nd 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.
Bibliografias
6
Unified Modeling Language (UML)
Diagrama de Classe
7
Análise-Projeto / Implementação
Uma classe em UML Uma classe em C++
#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
Pessoa
#diaP: int#mesP: int#anoP: int#idadeP: int#nomeP: char[30]#id: int
<<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+setNome(n: char*): void+getNome(): char*+setId(i: int): void+getId(): int
8
Diagrama de Classe (de “Análise”) - Herança
Professor
<<create>>-Professor(diaNa: int, mesNa: int, anoNa: int, nome: char)<<create>>-Professor(i: int)<<destroy>>-Professor()+OndeTrabalho(): void+QualDepartamentoTrabalho(): void
Pessoa
#diaP: int#mesP: int#anoP: int#idadeP: int#nomeP: char[30]#id: int
<<create>>+Pessoa(diaNa: int, mesNa: int, anoNa: int, nome: char)<<create>>+Pessoa(i: int)<<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+setNome(n: char*): void+getNome(): char*+setId(i: int): void+getId(): int
Aluno
-RA: int
<<create>>+Aluno(i: int)<<create>>+Aluno(diaNa: int, mesNa: int, anoNa: int, nomeNa: char*)<<destroy>>+Aluno()+setRA(ra: int): void+getRA(): int
RA = Registro Acadêmico
9
Diag. Classes (“Análise”) Agregação (Fraca -Simples)
Disciplina
-id: int-nome: char[150]-area_conhecimento: char[150]
<<create>>-Disciplina(i: int, na: int, ac: char*)<<create>>+Disciplina()<<destroy>>-Disciplina()+setId(i: int): void+getId(): int+setNome(n: char*): void+getNome(): char*
Aluno
-RA: int
<<create>>+Aluno(i: int)<<create>>+Aluno(diaNa: int, mesNa: int, anoNa: int, nomeNa: char*)<<destroy>>+Aluno()+setRA(ra: int): void+getRA(): int
1..* 1..*
10
Diagrama de Classes (“Análise”) - Associação
Disciplina
-id: int-nome: char[150]-area_conhecimento: char[150]
<<create>>-Disciplina(i: int, na: int, ac: char*)<<create>>+Disciplina()<<destroy>>-Disciplina()+setId(i: int): void+getId(): int+setNome(n: char*): void+getNome(): char*
Aluno
-RA: int
<<create>>+Aluno(i: int)<<create>>+Aluno(diaNa: int, mesNa: int, anoNa: int, nomeNa: char*)<<destroy>>+Aluno()+setRA(ra: int): void+getRA(): int
Cursar
1..*1..*
11
Diagrama de Classes (“Análise”) – Papeis
associativos
Disciplina
-id: int-nome: char[150]-area_conhecimento: char[150]
<<create>>-Disciplina(i: int, na: int, ac: char*)<<create>>+Disciplina()<<destroy>>-Disciplina()+setId(i: int): void+getId(): int+setNome(n: char*): void+getNome(): char*
Aluno
-RA: int
<<create>>+Aluno(i: int)<<create>>+Aluno(diaNa: int, mesNa: int, anoNa: int, nomeNa: char*)<<destroy>>+Aluno()+setRA(ra: int): void+getRA(): int
Cursar
+São Cursadas+Cursam
1..*1..*
12
Realização – Relação entre Relações
Disciplina
-id: int-nome: char[150]-area_conhecimento: char[150]
<<create>>-Disciplina(i: int, na: int, ac: char*)<<create>>+Disciplina()<<destroy>>-Disciplina()+setId(i: int): void+getId(): int+setNome(n: char*): void+getNome(): char*
Aluno
-RA: int
<<create>>+Aluno(i: int)<<create>>+Aluno(diaNa: int, mesNa: int, anoNa: int, nomeNa: char*)<<destroy>>+Aluno()+setRA(ra: int): void+getRA(): int
Cursar
+São Cursadas+Cursam
1..*1..*
1..* 1..*
13
Unified Modeling Language (UML)
Diagrama de Classe
(de "análise" e de "projeto")
14
Diagrama de ClasseAssociação Direcional
Aluno
-RA: int
<<create>>+Aluno(i: int)<<create>>+Aluno(diaNa: int, mesNa: int, anoNa: int, nomeNa: char*)<<destroy>>+Aluno()+setRA(ra: int): void+getRA(): int
Departamento
-id: int-nome: char[100]
<<create>>+Departamento(i: int)<<destroy>>+Departamento()+getId(): int+setNome(n: char): void+getNome(): char
CONHECER
1
15
Diagrama de ClasseAssociaçã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.
Aluno
-RA: int
<<create>>+Aluno(i: int)<<create>>+Aluno(diaNa: int, mesNa: int, anoNa: int, nomeNa: char*)<<destroy>>+Aluno()+setRA(ra: int): void+getRA(): int
Departamento
-id: int-nome: char[100]
<<create>>+Departamento(i: int)<<destroy>>+Departamento()+getId(): int+setNome(n: char): void+getNome(): char
CONHECER
1
16
Diagrama de Classe (de “Análise”)
Associação Bidirecional
Aluno
-RA: int
<<create>>+Aluno(i: int)<<create>>+Aluno(diaNa: int, mesNa: int, anoNa: int, nomeNa: char*)<<destroy>>+Aluno()+setRA(ra: int): void+getRA(): int
Departamento
-id: int-nome: char[100]
<<create>>+Departamento(i: int)<<destroy>>+Departamento()+getId(): int+setNome(n: char): void+getNome(): char
CONHECER
11..*
17
Diagrama de Classe (de “Análise”)Associação Bidirecional com Papeis
CONHECER
+gerencia_estudo+estuda
11..*
Departamento
-id: int-nome: char[100]
<<create>>+Departamento(i: int)<<destroy>>+Departamento()+getId(): int+setNome(n: char): void+getNome(): char
Aluno
-RA: int
<<create>>+Aluno(i: int)<<create>>+Aluno(diaNa: int, mesNa: int, anoNa: int, nomeNa: char*)<<destroy>>+Aluno()+setRA(ra: int): void+getRA(): int
18
Diagrama de Classe (de “Projeto”)Classe de Associação
Aluno
-RA: int
<<destroy>>+Aluno()<<create>>+Aluno(i: int)+setRA(ra: int): void+getRA(): int+setDepartamento(d: Departamento*): void+getDepartamento(): Departamento*+setId(i: int): void+getId(): int
Departamento
-id: int-nome: char[100]-. . .-objtLAlunos: ListaAluno
<<create>>+Departamento(i: int)<<destroy>>+Departamento()+getId(): int+setNome(n: char*): void+getNome(): char*+incluaAluno(a: Aluno*): void+listeAlunos(): void+. . .()
CONHECER+gerencia_estudos+estudande
11..*
ListaAluno<<Projeto>>
-quant: int
<<create>>+ListaAluno()<<destroy>>+ListaAlunos()+getQuant(): int+setQuant(int q): void+incluaAlunos(a: Aluno*): void+listeAlunos(): void
19
Diagrama de Classe (de “Projeto”)Composição (Agregação Forte)
Aluno
-RA: int
<<destroy>>+Aluno()<<create>>+Aluno(i: int)+setRA(ra: int): void+getRA(): int+setDepartamento(d: Departamento*): void+getDepartamento(): Departamento*+setId(i: int): void+getId(): int
Departamento
-id: int-nome: char[100]-. . .-objtLAlunos: ListaAluno
<<create>>+Departamento(i: int)<<destroy>>+Departamento()+getId(): int+setNome(n: char*): void+getNome(): char*+incluaAluno(a: Aluno*): void+listeAlunos(): void+. . .()
CONHECER
+gerencia_estudos+estudande
11..*
ListaAluno<<Projeto>>
-quant: int
<<create>>+ListaAluno()<<destroy>>+ListaAlunos()+getQuant(): int+setQuant(int q): void+incluaAlunos(a: Aluno*): void+listeAlunos(): void
1
1
20
Diagrama de Classe (de “Projeto”)Estereótipo
1
Aluno
-RA: int
<<destroy>>+Aluno()<<create>>+Aluno(i: int)+setRA(ra: int): void+getRA(): int+setDepartamento(d: Departamento*): void+getDepartamento(): Departamento*+setId(i: int): void+getId(): int
CONHECER+gerencia_estudos+estudande
11..*
Departamento
-id: int-nome: char[100]+. . .+objtLAlunos: ListaAluno
<<create>>+Departamento(i: int)<<destroy>>+Departamento()+getId(): int+setNome(n: char*): void+getNome(): char*+incluaAluno(a: Aluno*): void+listeAlunos(): void+. . .()
1
1
ListaAluno<<Projeto>>
-quant: int-nome: char
+ListaAluno(nome: char)~ListaAluno()+getQuant(): int+setQuant(int q): void+incluaAlunos(a: Aluno*): void+listeAlunos(): void
ESTAR
+lista
+listado
1
1..*
Diagrama de Classe (de “Projeto”)
Realização
21
Aluno
-RA: int
<<destroy>>+Aluno()<<create>>+Aluno(i: int)+setRA(ra: int): void+getRA(): int+setDepartamento(d: Departamento*): void+getDepartamento(): Departamento*+setId(i: int): void+getId(): int
CONHECER
+gerencia_estudos+estudande
11..*
Departamento
-id: int-nome: char[100]-. . .-objtLAlunos: ListaAluno
<<create>>+Departamento(i: int)<<destroy>>+Departamento()+getId(): int+setNome(n: char*): void+getNome(): char*+incluaAluno(a: Aluno*): void+listeAlunos(): void+. . .()
1
1ListaAluno
<<Projeto>>
-quant: int
<<create>>+ListaAluno()<<destroy>>+ListaAlunos()+getQuant(): int+setQuant(int q): void+incluaAlunos(a: Aluno*): void+listeAlunos(): void
ESTAR +lista
+listado
1
1..*
CONHECER+conhece
11
22
Diagrama de Classe (de “Projeto”)Realização
Aluno
-RA: int
<<destroy>>+Aluno()<<create>>+Aluno(i: int)+setRA(ra: int): void+getRA(): int+setDepartamento(d: Departamento*): void+getDepartamento(): Departamento*+setId(i: int): void+getId(): int
CONHECER+gerencia_estudos+estudande
11..*
Departamento
-id: int-nome: char[100]-. . .-objtLAlunos: ListaAluno
<<create>>+Departamento(i: int)<<destroy>>+Departamento()+getId(): int+setNome(n: char*): void+getNome(): char*+incluaAluno(a: Aluno*): void+listeAlunos(): void+. . .()
1
1ListaAluno
<<Projeto>>
-quant: int
<<create>>+ListaAluno()<<destroy>>+ListaAlunos()+getQuant(): int+setQuant(int q): void+incluaAlunos(a: Aluno*): void+listeAlunos(): void
ElAluno<<Projeto>>
ESTAR+lista
+listado
1
1..*
CONHECER
+conhecido
+conhece
1
*11..*
CONHECER+conhece
11
23
Diagrama de Classe (de “Projeto”)“Refinando Realização” – “Relação Reflexiva”
Aluno
-RA: int
<<destroy>>+Aluno()<<create>>+Aluno(i: int)+setRA(ra: int): void+getRA(): int+setDepartamento(d: Departamento*): void+getDepartamento(): Departamento*+setId(i: int): void+getId(): int
CONHECER
+gerencia_estudos+estudande
11..*
Departamento
-id: int-nome: char[100]-. . .-objtLAlunos: ListaAluno
<<create>>+Departamento(i: int)<<destroy>>+Departamento()+getId(): int+setNome(n: char*): void+getNome(): char*+incluaAluno(a: Aluno*): void+listeAlunos(): void+. . .()
1
1
ListaAluno<<Projeto>>
-quant: int
<<create>>+ListaAluno()<<destroy>>+ListaAlunos()+getQuant(): int+setQuant(int q): void+incluaAlunos(a: Aluno*): void+listeAlunos(): void
ElAluno<<Projeto>>
ESTAR
+lista
+listado
1
1..*
CONHECER
+conhecido
+conhece
1
*
Conhecer Próximo
0..1
0..1Conhecer Anterior
0..1
0..1
Conhecer Primeiro0..1 0..1
Conhecer Atual0..1 0..1
11..*
CONHECER+conhece
11
24
Diagrama de Classe (de “Projeto”)“Projeto – ‘Eliminando’ Análise” - 1
Aluno
-RA: int
<<destroy>>+Aluno()<<create>>+Aluno(i: int)+setRA(ra: int): void+getRA(): int+setDepartamento(d: Departamento*): void+getDepartamento(): Departamento*+setId(i: int): void+getId(): int
Departamento
-id: int-nome: char[100]-. . .-objtLAlunos: ListaAluno
<<create>>+Departamento(i: int)<<destroy>>+Departamento()+getId(): int+setNome(n: char*): void+getNome(): char*+incluaAluno(a: Aluno*): void+listeAlunos(): void+. . .()
1
1
ListaAluno<<Projeto>>
-quant: int
<<create>>+ListaAluno()<<destroy>>+ListaAlunos()+getQuant(): int+setQuant(int q): void+incluaAlunos(a: Aluno*): void+listeAlunos(): void
ElAluno<<Projeto>>
ESTAR
+lista
+listado
1
1..*
CONHECER
+conhecido
+conhece
1
*
Conhecer Próximo0..1
0..1Conhecer Anterior
0..1
0..1
Conhecer Primeiro0..1 0..1
Conhecer Atual0..1 0..1
1
1..*
CONHECER+conhece
11
25
Diagrama de Classe (de “Projeto”)“Projeto – ‘Eliminando’ Análise” - 2
Aluno
-RA: int
<<destroy>>+Aluno()<<create>>+Aluno(i: int)+setRA(ra: int): void+getRA(): int+setDepartamento(d: Departamento*): void+getDepartamento(): Departamento*+setId(i: int): void+getId(): int
Departamento
-id: int-nome: char[100]-. . .-objtLAlunos: ListaAluno
<<create>>+Departamento(i: int)<<destroy>>+Departamento()+getId(): int+setNome(n: char*): void+getNome(): char*+incluaAluno(a: Aluno*): void+listeAlunos(): void+. . .()
1
1
ListaAluno<<Projeto>>
-quant: int
<<create>>+ListaAluno()<<destroy>>+ListaAlunos()+getQuant(): int+setQuant(int q): void+incluaAlunos(a: Aluno*): void+listeAlunos(): void
ElAluno<<Projeto>>
CONHECER
+conhecido
+conhece
1
*
Conhecer Próximo
0..1
0..1
Conhecer Anterior
0..1
0..1
Conhecer Primeiro0..1 0..1
Conhecer Atual0..1 0..1
1
1..*
CONHECER+conhece
11
26
Diagrama de Classe (de “Projeto”)“Projeto – ‘Eliminando’ Análise” - 3
Aluno
-RA: int
<<destroy>>+Aluno()<<create>>+Aluno(i: int)+setRA(ra: int): void+getRA(): int+setDepartamento(d: Departamento*): void+getDepartamento(): Departamento*+setId(i: int): void+getId(): int
Departamento
-id: int-nome: char[100]-. . .-objtLAlunos: ListaAluno
<<create>>+Departamento(i: int)<<destroy>>+Departamento()+getId(): int+setNome(n: char*): void+getNome(): char*+incluaAluno(a: Aluno*): void+listeAlunos(): void+. . .()
1
1
ListaAluno<<Projeto>>
-quant: int
<<create>>+ListaAluno()<<destroy>>+ListaAlunos()+getQuant(): int+setQuant(int q): void+incluaAlunos(a: Aluno*): void+listeAlunos(): void
ElAluno<<Projeto>>
CONHECER
+conhecido
+conhece
1
*
Conhecer Próximo
0..1
0..1
Conhecer Anterior
0..1
0..1
Conhecer Primeiro0..1 0..1
Conhecer Atual0..1 0..1
CONHECER+conhece
11
27
Diagrama de Classe (de “Análise”)Composição (Agregação Forte)
Departamento
-id: int-nome: char[100]
<<create>>+Departamento(i: int)<<destroy>>+Departamento()+getId(): int+setNome(n: char): void+getNome(): char
Disciplina
-id: int-nome: char[150]-area_conhecimento: char[150]
<<create>>+Disciplina(i: int, na: int, ac: char*)<<create>>+Disciplina()<<destroy>>+Disciplina()+setId(i: int): void+getId(): int+setNome(n: char*): void+getNome(): char*
1 1..*
28
Diagrama de Classe (de “Projeto”)Composição (Agregação Forte)
Disciplina
-id: int-nome: char[100]-area_conhecimento: char[100]-pDepto: Departamento*
<<create>>-Disciplina(i: int, na: int, ac: char*)<<destroy>>-Disciplina()+setId(i: int): void+getId(): int+setNome(n: char*): void+getNome(): char*+setDepartamento(d: Departamento*): void+getDepartamento(): Departamento*+setAluno(a: Aluno): void+listeAlunos(): void+listeAlunos2(): void
Departamento
-id: int-nome: char[100]-. . .-objtLAlunos: ListaAluno
<<create>>+Departamento(i: int)<<destroy>>+Departamento()+getId(): int+setNome(n: char*): void+getNome(): char*+incluaAluno(a: Aluno*): void+listeAlunos(): void+. . .()
1 1..*
ListaDisciplina<<Projeto>>
ElDisciplina<<Projeto>>
1
1
CONHECER
1
*
CONHECER PRIMEIRO
0..10..1
CONHECER ATUAL
0..10..1
CONHECER PROXIMO
0..10..1
CONHECER ANTERIOR
0..1
0..1
Conhecer1 *
StarUML
• Versão usada da Ferramenta CASE STAR
UML:
– Version 5.0.2.1570
29