Escolar Documentos
Profissional Documentos
Cultura Documentos
12 de junho de 2021
2
3
Copyright(C) André Duarte Bueno.
Todos os direitos reservados e protegidos pela Lei 5.988 de 14/12/1973. É proibida a reprodução desta obra, mesmo
parcial, por qualquer processo, sem prévia autorização, por escrito, do autor.
• Editor:
• Revisão técnica:
1
2
– http://www.lenep.uenf.br/~ldsc
– http://www.lenep.uenf.br
– http://www.cct.uenf.br
– http://www.uenf.br
– https://sites.google.com/view/professorandreduartebueno/
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
3
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Sumário
1 Etapas para o Desenvolvimento de um Software Orientado a Objeto, Modelagem UML (Diagramas)
e Umbrello 15
1.1 Concepção – especificações, requisitos e cenários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.1.1 Exemplo especificação (simplificada) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.1.2 UML - Diagrama de casos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.2 Elaboração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.2.1 Exemplo elaboração - cálculo da área (integral) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.2.2 UML - Diagrama de pacotes/componentes – assuntos, módulos . . . . . . . . . . . . . . . . . . . . 37
1.2.3 Montagem de protótipo da interface do software . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.3 AOO – Análise Orientada a Objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4
SUMÁRIO 5
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
SUMÁRIO 6
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
SUMÁRIO 7
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Lista de Figuras
1.1 Engenharia - Modelos, Processos, Projetos, Desenvolvimento/Implantação - Exemplo . . . . . . . . . . . . 16
1.2 Etapas de desenvolvimento de um software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3 Relacionamento dos diagramas estruturais da UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.4 Relacionamento dos diagramas dinâmicos da UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.5 Etapas de desenvolvimento de um software: Concepção . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.6 Diagrama de caso de uso geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.7 Diagrama de caso de uso específico – calcular área função . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.8 Diagrama de caso de uso: analisar resultados (uso de generalização) . . . . . . . . . . . . . . . . . . . . . 27
1.9 Etapas de desenvolvimento de um software: Elaboração - Análise de domínio, identificação de assuntos,
prototipagem e iteração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
8
LISTA DE FIGURAS 9
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
LISTA DE FIGURAS 10
1.25 Etapas de desenvolvimento de um software: Análise Orientada a Objeto - Modelo Estrutural - iteração . . 61
1.26 Relacionamento dos diagramas dinâmicos da UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
1.27 Etapas de desenvolvimento de um software: Análise Orientada a Objeto - Modelo Dinâmico . . . . . . . . 65
1.28 Etapas de desenvolvimento de um software: Análise Orientada a Objeto - Modelo Dinâmico . . . . . . . . 66
1.29 Diagrama de seqüência – elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
1.30 Diagrama de seqüência – montando uma prova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
1.31 Diagrama de seqüência – seqüência para cálculo da área de uma função . . . . . . . . . . . . . . . . . . . 70
1.32 Diagrama de comunicação – montando uma prova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
1.33 Diagrama de comunicação – seqüência para cálculo da área de uma função . . . . . . . . . . . . . . . . . 74
1.34 Diagrama de máquina de estado – um aluno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
1.35 Diagrama de máquina de estado – estados de uma thread . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
1.36 Diagrama de máquinas de estado: estados de um processo . . . . . . . . . . . . . . . . . . . . . . . . . . 80
1.37 Diagrama de máquina de estado – estados do objeto simulador . . . . . . . . . . . . . . . . . . . . . . . . 81
1.38 Em (a) o protótipo de um diagrama de atividades. Em (b) o diagrama de atividades de um método de
binarização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
1.39 Diagrama de atividades – método do Trapézio para cálculo da área . . . . . . . . . . . . . . . . . . . . . 87
1.40 Diagrama de atividades – método do Trapézio para cálculo da área - Usando número intervalos . . . . . . 88
1.41 Etapas de desenvolvimento de um software: Análise Orientada a Objeto - Modelo Dinâmico - Iteração . . 89
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
LISTA DE FIGURAS 11
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Lista de Figuras 12
1.60 Etapas de desenvolvimento de um software - ciclo construção - implementação - sequência para documentação152
1.61 Etapas de desenvolvimento de um software - espaço para documentação já esta nos modeladores UML . . 157
1.62 Imagem gerada pelo doxygen/graphviz/dot Ilustração gráfica das dependências do arquivo CRotulador3D . 159
1.63 Usando o trello para gestão do processo de desenvolvimento - 1 . . . . . . . . . . . . . . . . . . . . . . . . 163
1.64 Usando o trello para gestão do processo de desenvolvimento - 2 . . . . . . . . . . . . . . . . . . . . . . . . 164
1.65 Exercício – modelagem sistema aeroporto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Lista de Tabelas
13
Listings
Lista de programas
14
Capítulo 1
15
Prefácio 16
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 19
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 22
– Desenvolver um simulador de engenharia para cálculo da área de funções matemáticas do tipo y = f (x).
• Requisitos:
– Interface:
∗ Modo texto.
– Plataformas:
∗ Multiplataforma (GNU/Linux, Windows, Mac OS X).
– Ítens opcionais:
∗ Resultados serão armazenados em disco.
∗ Poderão ser gerados gráficos.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 24
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 25
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 26
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 27
Uma generalização de um caso de uso mostra que este pode ser realizado de uma forma mais específica. Funciona da
mesma forma que herança em classes; o caso de uso geral deve ser abstrato, e os casos de uso herdeiros, específicos.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 28
1.2 Elaboração
Depois da definição dos objetivos, da especificação do software e da montagem dos primeiros diagramas de caso de
uso, a equipe de desenvolvimento passa por um processo de elaboração que envolve o estudo de conceitos relacionados ao
software a ser desenvolvido, a análise de domínio e a identificação de pacotes.
Na elaboração fazemos uma análise dos requisitos, ajustando os requisitos iniciais de forma a desenvolver um sistema
útil, que atenda às necessidades do usuário e, na medida do possível, permita seu reuso e futura extensão.
Eliminam-se os requisitos "impossíveis", e ajusta-se a ideia do sistema de forma que este seja flexível, considerando-se
aspectos como custos e prazos.
A Figura 1.9 ilustra as atividades relacionadas a etapa de elaboração.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 29
Figura 1.9: Etapas de desenvolvimento de um software: Elaboração - Análise de domínio, identificação de assuntos,
prototipagem Orientada
Programação e iteração a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 30
Figura 1.10: Etapas de desenvolvimento de um software: Elaboração - Análise de domínio, identificação de assuntos,
prototipagem
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 31
• O conceito de integral é visto em disciplinas de cálculo, normalmente "Cálculo I" nos cursos de engenharia. Será
muito brevemente descrito aqui.
Matematicamente podemos ter diferentes funções, as mais utilizadas em engenharia são apresentadas a seguir.
A equação do primeiro (eq: 1.1),
y = a + b ∗ x, (1.1)
do segundo (eq: 1.2)
y = a + b ∗ x + c ∗ x2 , (1.2)
e do terceiro grau (eq: 1.3):
y = a + b ∗ x + c ∗ x2 + d ∗ x3 . (1.3)
De forma genérica podemos escrever:
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 32
y = f (x), (1.4)
indicando que o valor de y depende do valor de x. Por isso x é chamado independente e y dependente.
Em termos práticos, para a física e a engenharia, é muito interessante saber calcular a área abaixo da curva. Para
resolver este problema, ao longo dos séculos, foram desenvolvidas várias metodologias de cálculo (veja [Bassalo, 1996]).
A mais exata e geral é o cálculo da integral indefinida, cuja expressão formal é dada por:
Z
área = f (x)dx (1.5)
Note que na integral indefinida não existem limites e o resultado é uma equação genérica, ou seja, dado um intervalo
qualquer consigo calcular a área.
Na prática da engenharia o mais usual é a integral definida, em que os limites de integração, isto é, os intervalos, de
interesse são definidos. Então, a equação é reescrita com a definição dos intervalos li - limite inferior e ls - limite superior.
Zls
área = f (x)dx (1.6)
li
No exemplo da Figura 1.11 os limites são li = −2 e ls = 2.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 33
O resultado do cálculo desta integral é o valor exato da área abaixo da curva no intervalo especificado. Para entender
em detalhes o formalismo matemático associado sugere-se a consulta a livros de Calculo Diferencial e Integral.
De um modo geral um físico teórico e um pesquisador/cientista esta preocupado com o valor exato das equações. Este
também é um interesse do engenheiro, mas, por questões práticas, o engenheiro aceita resultados com valores aproximados.
Uma maneira de realizar esta aproximação no cálculo da área é utilizar trapézios, conforme ilustrado na Figura 1.11.
Note que é feita uma aproximação da área da curva utilizando-se diversos trapézios. A ideia é calcular a área de cada
trapézio individualmente e depois somar a área de todos eles.
Neste exemplo temos uma amostragem 5 (curva em roxo) e uma amostragem 101 (curva em vermelho). Na curva em
roxo conseguimos identificar que temos 4 trapézios, o primeiro é ilustrado a esquerda na cor verde. Note que para um
valor de x = −2 o valor de y = f (−2) = 32.0, e que para um valor de x = −1 obtemos y = f (−1) = 10.0. A área
deste trapézio é dada por área = 1 ∗ (f (−2) + f (−1))/2 = (32 + 10)/2 = 21. Se calcularmos a área de cada trapézio e
somarmos, teremos uma aproximação da área da curva. Esta é a ideia do método do trapézio.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 34
Figura 1.11: Esboço de uma função em vermelho e em azul ilustração do Método do Trapézio
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 35
f (x1) + f (x2)
AreaT rapézio_1 = ∗ dx (1.7)
2
Observe que calculamos f (x1) e f (x2).
A área do segundo e terceiro trapézio é definida pelas equações.
f (xi) + f (xi+1)
AreaT rapézio_i = ∗ dx (1.9)
2
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 36
Se somarmos a área de todos estes trapézios teremos a equação abaixo, que é a equação para cálculo da área aproximada
da curva pelo método do trapézio:
Z ls
1
f (x)dx ≈
[f (x1)dx + 2f (x2)dx + 2f (x3)dx + 2f (x4)dx + ... + 2f (xn−1)dx + f (xn)dx] (1.10)
li 2
Podendo ser reescrita de forma a otimizar os cálculos com dx para fora.
Z ls
f (x)dx ≈ dx [f (x1)/2 + f (x2) + f (x3) + f (x4) + ... + f (xn−1) + f (xn)/2] (1.11)
li
A qualidade ou precisão deste cálculo esta diretamente associada ao valor de dx, se for grande estaremos errando
mais, se for pequeno estaremos nos aproximando do valor exato. Se dx for um valor infinitamente pequeno estaremos
convergindo para o valor exato.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 37
• assuntos, sistemas, subsistemas, hierarquias de classes, classes, interfaces, componentes, nós, colaborações e casos
de uso.
• Permite ver as diferentes partes do sistema e suas dependêncas, tanto do ponto de vista da lógica como dos compo-
nentes físicos em sí.
• Podem ser usados para correlacionar diagramas de classes de forma simplificada (notadamente os complexos).
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 38
Nota: quando os diagramas de pacotes se referem a lógica do sistema podem ser chamados diagramas de assuntos,
quando se referem aos aspectos físicos de diagramas de componentes.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 39
Veja na Figura 1.13, exemplo de site de empresa que desenvolve simuladores de engenharia de petróleo, note que os
pacotes estão diretamente associados aos assuntos que vimos nas disciplinas do curso. Site https://www.emerson.com/pt-
br/automation/operations-business-management/reservoir-management-software. Ou seja, podemos definir a lista de
assuntos/pacotes com base nos conhecimentos existentes ou de softwares existentes.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 40
Figura 1.13: Diagrama de Assuntos/Pacotes: Veja a relação direta dos assuntos com os pacotes desenvolvidos pela empresa
Emerson. Site
Programação [https://www.emerson.com/pt-br/automation/operations-business-management/reservoir-management-
Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 41
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 42
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 44
• O modelo de análise deve ser conciso, simplificado, deve mostrar o que deve ser feito, não se preocupando como isso
será realizado. Ou seja, não se preocupa com aspectos relacionados a implementação dos sistemas.
• Na próxima etapa, projeto do sistema, iremos considerar: protocolos, recursos, mecanismos de controle, platafor-
mas(sistemas operacionais, linguagens), padrões de projeto e ferramentas.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 46
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 47
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 49
Figura 1.18: Etapas de desenvolvimento de um software: Análise Orientada a Objeto - Modelo Estrutural
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 50
Figura 1.19: Etapas de desenvolvimento de um software: Análise Orientada a Objeto - Modelo Estrutural
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 51
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 52
Papel
Quando uma associação não é clara, pode-se colocar no diagrama de classes o nome da associação e/ou o nome
do papel exercido por cada classe. Um papel é utilizado para indicar a forma como a classe vai atuar em uma
associação. Deve ter um nome unívoco, normalmente um substantivo, que identifique com clareza o papel que a
classe exerce na associação. Em alguns casos um papel é uma restrição ao objeto. Por exemplo: uma empresa tem
três secretárias, uma cuida da agenda do chefe, as outras duas trabalham na recepção. Observe que as três são
secretárias, mas o papel de cada uma é diferente.
Restrições
Em um modelo de objetos as restrições estabelecem relações funcionais entre objetos, classes, atributos e associações.
Como exemplo de restrições, podemos citar a restrição de que o raio de um círculo não ultrapasse determinado valor,
a restrição de só poder desenhar dentro da área cliente de uma janela. Um modelo de objetos bem desenvolvido
deve ter muitas restrições. Veja na Figura 1.21 que as restrições aparecem dentro de colchetes {}. A Figura 1.34
mostra que o aluno só será aprovado se obtiver nota maior ou igual a seis.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 53
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 54
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 55
Generalização
A generalização (bottom-up) é realizada identificando-se atributos e operações semelhantes. No exemplo da Figura
1.23, um relógio é uma generalização de relógio cronômetro e relógio alarme.
Especialização
Especialização é a criação de classes-derivadas (filhas) a partir de uma classe-base (pai). As classes-derivadas têm
acesso a todos os métodos e atributos da classe-base. A especialização (top-down) pode ser verificada por meio de
frases substantivas compostas por diversos adjetivos relativos ao nome da classe (exemplo: lâmpada incandescente,
lâmpada fluorescente). Uma especialização pode ter um nome como "é um tipo de" ou "é um". No exemplo da
Figura 1.23, um relógio cronômetro é um tipo de relógio que foi especializado.
Discriminador
Em um diagrama de classes, um discriminador costuma indicar qual propriedade de um objeto está sendo general-
izada.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 57
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 59
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 60
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 61
Figura 1.25: Etapas de desenvolvimento de um software: Análise Orientada a Objeto - Modelo Estrutural - iteração
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 62
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 63
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 65
Figura 1.27: Etapas de desenvolvimento de um software: Análise Orientada a Objeto - Modelo Dinâmico
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 66
Figura 1.28: Etapas de desenvolvimento de um software: Análise Orientada a Objeto - Modelo Dinâmico
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 67
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 68
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 69
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 70
Figura 1.31: Diagrama de seqüência – seqüência para cálculo da área de uma função
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 71
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 72
• Objetos podem ser conectados por relações de associação ou dependência. As dependências entre os nós representam
relações de comunicação (podendo ser unidirecionais ou bidirecionais).
• Um diagrama de comunicação pode ser detalhado usando-se uma numeração como em 1; 1.1; 1.2; e assim por diante.
• Algumas ferramentas CASE podem gerar o diagrama de comunicação a partir do diagrama de eventos e vice-versa.
• [Fowler and Scott, 2000] consideram que o estudo de alternativas, isto é, variações nos diagramas de comunicação e
seqüência podem ser exploradas com o uso de cartões CRC.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 73
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 74
Veja na Figura 1.33 uma representação de um diagrama de comunicação equivalente ao diagrama de seqüência da
Figura 1.31. O diagrama de comunicação ilustrado na Figura 1.33 mostra a seqüência para cálculo da área de uma função.
Figura 1.33: Diagrama de comunicação – seqüência para cálculo da área de uma função
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 75
• Estado – indica de forma abreviada o estado do objeto. Um exemplo de estado é a realização de uma atividade
demorada. Por exemplo: realizando entrada de dados, processando integração, processando montagem dos gráficos
(veja a Figura 1.37). Veja na Figura 1.34 (a) o protótipo de representação de um estado, o qual inclui: o nome do
estado, a ação de entrada(entry), a atividade a ser realizada(do) e a ação de saída(exit).
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 76
• Evento – causa a transição de estado (provoca execução da ação que muda o estado do objeto).
• Condição de guarda (guard condition) – uma condição de guarda impõe algum tipo de restrição à transição
de estado. É uma restrição booleana, se verdadeira a ação que provoca a transição de estado é executada. Uma
condição é representada entre colchetes {}. Por exemplo: um aluno só será considerado aprovado se tiver obtido
média final maior que 6 (veja a Figura 1.34).
• Ação – todo método que é executado quase instantaneamente e que está associado a um evento é denominado
ação (action). As ações podem representar operações internas de controle. Ações internas não mudam o estado do
objeto. Quando as transições de um estado executam a mesma ação, pode-se vincular o estado à ação. Ações estão
associadas a transições.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 77
Veja na Figura 1.34 (b) um exemplo de diagrama de máquina de estado para um aluno. Observe que este é formado
por nós que representam os estados e setas que representam as transições entre os estados; observe também como são
representados o estado inicial e final.
Inicie a construção do diagrama de máquina de estado a partir dos diagramas de seqüência; use os eventos oriundos
dos casos de uso. Todo caso de uso corresponde a um caminho a ser seguido no diagrama de máquina de estado, ou
seja, deve-se comparar os diversos casos de uso e verificar os pontos em que eles divergem (e que precisam ser codificados
no diagrama de máquina de estados). Lembre-se de que dois caminhos em um diagrama de máquina de estado serão os
mesmos se o objeto esquecer os valores passados.
Veja na Figura ?? os estados de uma thread e na Figura 1.36 os estados de um processo.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 78
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 80
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 81
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 82
• O diagrama de atividades se preocupa com os valores de entrada e saída dos métodos, como os atributos são
alterados, as dependências entre os métodos.
• Em um diagrama de atividades os nós representam ações ou atividades, e as linhas representam transições (uma
transição pode ocorrer quando a ação/atividade anterior foi completada).
• O diagrama de atividades é baseado em redes de petri; é semelhante a um fluxograma, a diferença é que ele permite
que atividades sejam executadas paralelamente.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 83
• Transições – são setas que indicam que a atividade anterior terminou e que a nova atividade vai ser executada.
• Losangos – losangos são utilizados para indicar tomadas de decisão, uso de estruturas de controle, como um if,
um switch. Uma breve descrição sobre a decisão pode ser incluída utilizando-se anotações.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 84
A Figura 1.38 mostra em (a) o protótipo de um diagrama de atividades. Observe que estão presentes os indicadores de
início e fim da atividade (os mesmos do diagrama de máquinas de estado), losangos para tomada de decisão, bifurcações
e aglutinações (utilizadas para indicar processamento concorrente) e as atividades.
A Figura 1.38 (b) mostra o diagrama de atividades de um método de binarização (transforma uma imagem em tons
de cinza ou colorida em imagem preto/branco). Observe que se a imagem já estiver binarizada o método não faz nada.
Se a imagem é em tons de cinza, chama o método que binariza imagens em tons de cinza e, se for imagem colorida, chama
o método que binariza imagens coloridas. Observe que é um método político e envolve apenas tomadas de decisões. O
processamento será feito em métodos auxiliares.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 85
Figura 1.38: Em (a) o protótipo de um diagrama de atividades. Em (b) o diagrama de atividades de um método de
binarização
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 86
A Figura 1.39 mostra o diagrama de atividades para o método do Trapézio. O mesmo é utilizado para calcular a
área de uma função. Observe que toda seqüência de cálculo é detalhada. Note que temos nas figuras duas versões, qual
a melhor?
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 87
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 88
Figura 1.40: Diagrama de atividades – método do Trapézio para cálculo da área - Usando número intervalos
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 89
Figura 1.41: Etapas de desenvolvimento de um software: Análise Orientada a Objeto - Modelo Dinâmico - Iteração
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 90
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 92
Segundo [Rumbaugh et al., 1994, Blaha and Rumbaugh, 2006], o projeto do sistema é a estratégia de alto nível para
resolver o problema e elaborar uma solução. Você deve se preocupar com itens como:
1. Protocolos
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 94
2. Recursos
• Identificação e alocação dos recursos globais: como os recursos do sistema serão alocados, utilizados, compar-
tilhados e liberados. Implicam modificações no diagrama de componentes (veja a seção 1.7.2).
• Identificação da necessidade do uso de banco de dados. Implicam em modificações nos diagramas de atividades
e de componentes.
• Identificação da necessidade de sistemas de armazenamento de massa.
– Por exemplo: um storage em um sistema de cluster ou sistemas de backup ou simulação com grande
demanda de disco.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 95
3. Controle
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 96
4. Plataformas
5. Padrões de projeto
• Normalmente os padrões de projeto são identificados e passam a fazer parte de uma biblioteca de padrões da
empresa. Mas isto só ocorre após a realização de diversos projetos.
6. Licença do software
• Se ainda não foi definida a licença é hora de escolher. Lembrando que se o pacote for grande diferentes partes
podem ter diferentes licenças.
7. Ferramentas
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 97
Nota: uma das maiores preocupações de simulações de engenharia é o desempenho. A necessidade de se aliar desempenho,
interface gráfica amigável e reuso de bibliotecas limita o número de linguagens a serem utilizadas, de modo que C++
tem sido a mais indicada (veremos a otimização de programas em capítulos específicos).
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 98
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 99
• Se o sistema realiza seqüências predefinidas como em arquivos de lote (por exemplo, autoexec.bat, init.d), ou cálculos
seqüênciais, então o controle pode ser feito por arquivos ASCII, os quais determinam a seqüência a ser realizada.
Mecanismos de reinicialização do sistema podem ser incluídos. Este tipo de sistema utiliza uma estrutura de
controle chamada de transformação em lote, bastante utilizada em procedimentos de engenharia, no processamento
de transações bancárias (cheques) e transações agendadas.
• Um sistema com controle do tipo transformação contínua permite a realização de etapas de simulações. Para cada
bloco de tarefas executadas, o usuário analisa os resultados obtidos e toma decisões a respeito da seqüência de
execução do sistema, ou seja, o usuário pode alterar o fluxo de execução do programa.
• Em uma interface interativa os usuários interagem o tempo todo com o sistema (geralmente utilizando uma interface
gráfica - menus e ícones). De maneira geral, este tipo de controle é baseado em eventos e permite a execução
concorrente (pelo uso de múltiplas threads e/ou processos). O acesso compartilhado aos recursos pode ser controlado
por bloqueadores de acesso (mutex ). Sistemas de software modernos com controle do tipo interface interativa
utilizam listas e podem ter macros para execução de atividades repetitivas.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 100
Sistemas científicos e simulações de engenharia (como processamento de dados, sinais e imagens, simulações químicas e
ambientais, simulações de reservatório) podem utilizar um dos tipos de controle acima definidos. Se a simulação é fechada
(dados de entrada e saída previamente definidos), pode-se utilizar tranformação em lote, sua grande vantagem é não
requerer paradas para entrada de dados. Se existem poucas necessidades de interação com o usuário, use transformação
contínua. Sistemas modernos de engenharia utilizam interface interativa, possibilitando um controle mais refinado das
simulações a serem realizadas. A dificuldade aqui é que em alguns casos as simulações são lentas e o usuário fica preso, ou
seja, precisa esperar um determinado tempo, responder a um questionamento do software, esperar de novo, e isso pode
ser improdutivo.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 101
Um programa em ANSI C++ pode ser compilado em diversas plataformas. O procedimento é simples; basta copiar o
código-fonte para a plataforma-alvo e, em seguida, compilar os programas usando um compilador padrão Ansi C++.
Atualmente é usual os códigos estarem num repositório na nuvem. A criação automatizado dos arquivos Makefile pode
ser feita por sistemas montadores, como exemplo o cmake.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 102
• Segundo [Korson and Macgregor, 92], uma biblioteca orientada a objeto deve:
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 103
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 104
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 105
• qt: https://www.qt.io/
• gtk: https://www.gtk.org/
• wxwidgets: https://www.wxwidgets.org/
– Usa licença LGPL com uma exceção. "The wxWindows Library Licence is essentially the L-GPL (Library
General Public Licence), with an exception stating that derived works in binary form may be distributed on the
user’s own terms. ".
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 106
Nota: se o sistema que vai ser desenvolvido é grande, então a etapa de projeto pode ser feita em paralelo à análise e
deve considerar as experiências da equipe de desenvolvimento.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 107
– LGPL é software livre, permite que software proprietários e livres o utilizem em sua construção. Ou seja, não
há muitas questões legais que impeçam o seu uso, mas lembre de usar linkagem dinâmica e não estática.
– •{} https://choosealicense.com/licenses/lgpl-3.0/.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 108
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 109
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 111
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 112
• Passa pelo maior detalhamento do funcionamento do programa, acrescentando atributos e métodos que
envolvem a solução de problemas específicos não identificados durante a análise. De um modo geral a definição
da plataforma impacta as bibliotecas e sistemas externos a serem utilizados e isso precisa ser incluído
nos projetos.
• Envolve a otimização da estrutura de dados e dos algoritmos, a minimização do tempo de execução, de memória e
de custos. Existe um desvio de ênfase para os conceitos da plataforma selecionada.
– Exemplo: na análise você define que existe um método para salvar um arquivo em disco, define um atributo
nomeDoArquivo, mas não se preocupa com detalhes específicos da linguagem. Já no projeto, você inclui as
bibliotecas necessárias para acesso ao disco, cria um objeto específico para acessar o disco, podendo, portanto,
acrescentar novas bibliotecas e classes àquelas desenvolvidas na análise.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 114
• De posse do diagrama de componentes, temos a lista de todos os arquivos necessários para compilar
e rodar o programa.
• Observe que um assunto/pacote pode se transformar em uma biblioteca e será incluído no diagrama de componentes.
• A ligação entre componentes pode incluir um estereótipo indicando o tipo de relacionamento ou algum protocolo
utilizado.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 115
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 117
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 119
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 120
• Gestão:
– Estimativa do tempo total de produção, prazo para conclusão do software (considerar margem de erro).
– Definição do prazo de cada ciclo e cálculo do número de ciclos e versões.
– Colocar a lista das características em software de gestão específico, como exemplo o trello e o google tables.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 122
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 123
Figura 1.51: Etapas de desenvolvimento de um software: projeto orientado a objeto: Ciclo Planejamento e detalhamento
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 124
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 125
• Os diagramas estruturais e dinâmicos são revisados e ampliados (com mais diagramas de atividades por exemplo).
• Também é feito um detalhamento de aspectos relacionados a parte operacional do desenvolvimento dos códigos.
• Entender bem as características da linguagem e bibliotecas selecionadas é fundamental, pois o foco passa a ser os
planos de implementação.
Nota: Note que existe uma diferença para a etapa de projeto orientado a objeto. Ali o software foi visto e analisado
como um todo, aqui a ênfase se dá apenas na lista de características/funcionalidades a serem implementadas em
cada ciclo c1, c2, ..., cn. É a velha ideia de dividir para conquistar. Note ainda que softwares de pequeno porte
podem ser desenvolvidos em apenas um ciclo.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 126
A Figura 1.2 ilustra as diversas etapas a serem seguidas, as mesmas são descritas a seguir.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 128
• a implementação/codificação: algumas dicas para implementação da interface gráfica do programa e como montar
o código inicial do programa com o umbrello.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 130
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 132
• Antes de iniciar a implementação de um método complexo, você deve concluir o seu diagrama de atividades.
• Na implementação a dica é criar classes de teste para testar as classes e subsistemas criados (veja o item 4 da seção
1.10).
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 133
• C++, Actionscript, Ada, IDL, Java, JavaScript, Pascal, Perl, PHP, Python, Ruby, SQL, TCL, XMLschema.
Nota: se você ainda não tem o programa umbrello instalado, veja https://umbrello.kde.org/.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 135
Veja a seguir um roteiro para montar o código inicial do programa com o umbrello.
2. Monte os diagramas de classes para seu sistema. Inclua todos os atributos, métodos e associações necessárias.
3. Revise o diagrama de classe. A idéia é só gerar o código depois que o diagrama de classe esteja correto.
6. Selecione o item de menu ’Código->Assistente de Geração de Código’. No diálogo ’Assistente de Geração de Código’,
selecione as classes que devem ter seu código gerado e em seguida pressione o botão "Próximo".
(a) Geral – você define a linguagem a ser utilizada, além da pasta onde o programa vai ser armazenado e a política
de substituição de arquivos.
(b) Formatação – define características dos comentários, tipo e quantidade de indentação.
(c) Opções de linguagem – define características específicas da linguagem selecionada.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 136
8. Confira as classes selecionadas e então pressione "Gerar". O código gerado estará disponibilizado no diretório
informado.
Com o código inicial do programa gerado por uma ferramenta CASE (como o umbrello ou o Visual-Paradigm), parte-se
para a implementação do programa. Nesta etapa são essenciais não só os conhecimentos da modelagem orientada a objeto,
mas da linguagem de programação, ou seja, as regras de sintaxe e a forma como a linguagem implementa a programação
orientada a objeto.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 137
• Escolha uma biblioteca gráfica que seja software livre, que seja multiplataforma, que seja constantemente
atualizada.
• Na medida do possível, a interface deve ser orientada a objeto, isto é, os elementos visuais da interface devem
representar objetos internos.
• Use threads (processamento paralelo). Por exemplo: é interessante ter uma thread separada responsável pela
atualização da interface gráfica do sistema, enquanto outras threads estão realizando as atividades solicitadas.
• Diálogos devem lembrar as últimas opções selecionadas. Você pode incluir um botão "default".
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 138
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 140
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 141
• O objetivo primário do teste de software é diminuir as falhas de um software, tendo como conseqüência
uma redução no custo e no tempo de desenvolvimento do software.
• Entre as vantagens de um software bem testado estão o aumento da qualidade, da funcionalidade e a redução das
falhas. Outras conseqüências de um software bem testado é a redução na necessidade de suporte.
• Controle o processo de teste. Você precisa definir o rigor, o nível de detalhamento dos testes a serem realizados.
Por exemplo: um programa para controle de vôo requer um sistema de testes extremamente rigoroso.
• Use procedimentos automatizados para execução do teste (como check-list e programas de teste).
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 142
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 143
Figura 1.58: Etapas de desenvolvimento de um software - ciclo construção - implementação - sequência para testes
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 144
• Todos os diagramas de caso de uso foram considerados? Foram utilizados para montagem dos diagramas de
comunicação?
• O teste lógico é realizado sem nenhum código; para tanto, partimos dos diagramas de casos de uso e criamos
os diagramas de comunicação. No teste lógico é verificada a integração entre pacotes, componentes e classes.
• Quando necessário os diagramas de máquina de estado foram montados?
• Você montou os diagramas de atividade para os métodos complexos?
• Foram consideradas questões numéricas, como erros de arredondamento, conversões de dados/tipos.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 145
3. Teste de integração:
Consiste em testar a integração entre as diversas partes do sistema (classes <-> classes, classes <-> subsistemas,
subsistema<->subsistema).
• Testar a integração entre as classes que fazem parte de um pacote/assunto ou hierarquia. Acesso, comunicação,
funcionalidade (usar diagramas de comunicação, de atividades, de componentes).
• Testar integração dentro de uma hierarquia.
• Testar as relações e integrações entre pacotes/subsistemas.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 146
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 147
– Teste dos manuais, tutoriais. Os manuais foram feitos? Foram revisados? Os links estão corretos?
• Teste de versões.
– Consiste em distribuir o sistema e receber o retorno dos usuários (versões alfa e beta).
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 148
5. Teste de regressão:
Toda vez que alteramos uma parte do sistema que estava funcionando, podemos adicionar novos bugs. O teste
de regressão é realizado para verificar se o programa continua funcionando. Para reduzir o número de testes de
regressão procure deixar suas classes completas.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 149
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 151
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 152
Figura 1.60: Etapas de desenvolvimento de um software - ciclo construção - implementação - sequência para documentação
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 153
• README/LEIAME
• INSTALL
• ChangeLog
• NEWS
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 154
– novidades da versão;
• BUGS
– bugs identificados/solucionados;
• COPYING
• AUTHORS
– lista de autores;
• TODO
Nota: para o desenvolvedor existe um efeito secundário associado à documentação do sistema, que é o estudo, a com-
preensão e a descrição do próprio código.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 155
• Documentação do sistema.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 156
Note que ao incluir classes, atributos, métodos, associações, artefatos e outras entidades nos diagramas UML, softwares
modeladores como o umbrello, já disponibilizam locais para inserção da documentação. Veja Figura 1.61. Outros itens
são documentados diretamente no código.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 157
Figura 1.61: Etapas de desenvolvimento de um software - espaço para documentação já esta nos modeladores UML
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 158
A titulo ilustrativo veja a seguir como fica a documentação de atributos e métodos usando o padrão javadoc em C++.
Esta documentação será processada por softwares externos como o doxygen.
• Documentação de atributo
• Documentação de método
3 * @fn Soma
4 * @param int a
5 * @param int b
8 */
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 159
Figura 1.62: Imagem gerada pelo doxygen/graphviz/dot Ilustração gráfica das dependências do arquivo CRotulador3D
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 160
• Manual do usuário:
– Antigamente era fornecido junto com os softwares no formato impresso. Atualmente é fornecido no formato
pdf e/ou html.
– Apresenta informações e explicações de instalação e uso do software.
– Deve ser bem feito.
Ambos os manuais podem ser desenvolvidos utilizando-se sistemas profissionais, como exemplo usamos o sistema composto
pelo editor de texto LyX/TeX/LaTeX (http://lyx.org).
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 161
• Economia de tempo.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 162
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 163
– Exemplo:
– https://www.emerson.com/pt-br/automation/operations-business-management/reservoir-management-software
• Livros
– Engenharia de software:
∗ [Rezende, 2002, Pressman, 2002, Booch, 1986, Melo, 2004]
– Modelagem:
∗ [Blaha and Rumbaugh, 2006, McLaughlin et al., 2006, Coad and Yourdon, 1993, Rumbaugh et al., 1994,
Winblad and others., 1993, Ann L. Winblad, 1990, Booch, 1986, R and B, 1998]
– UML:
∗ [Guedes, 2018, Lee, 2019, Silva, 2001, Fowler and Scott, 2000, Noback, 2020, de Matos, 2002]
– Processos:
∗ [Palmer and Felsing, 2002, Puri, 2009]
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 166
– Padrões de projeto
∗ [Eric Freeman, 2020, Erich Gamma and Vlissides, 1994, Gamma et al., 1994]
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 167
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 168
funcionamento.
No projeto orientado a objeto aprendemos a montar os diagramas de componentes e de implantação (execução).
Na implementação aprendemos que podemos usar o umbrello para montagem do código inicial utilizando os diagramas
de classe. Aprendemos a importância do teste de software. Vimos que a documentação é uma etapa fundamental para o
desenvolvimento de programas com qualidade.
Finalmente, a manutenção envolve tanto a adaptação do software às novas solicitações dos usuários quanto a montagem
de bibliotecas reutilizáveis.
Uma maneira de "prever" o futuro é estar sempre atualizado, ler revistas de programação, inscrever-se em sites de
discussão das APIs que for utilizar e inscrever-se em sites de desenvolvimento de software.
Nota: deve-se ressaltar que os seus primeiros programas utilizando POO consumirão o mesmo tempo que os desenvolvidos
utilizando técnicas estruturadas. As vantagens do reaproveitamento aparecem à medida que os programas vão sendo
desenvolvidos, ou quando você já dispõe de uma biblioteca OO e pode desenvolver o software com ela.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 169
1.16 Exercícios
1. Descreva, de forma resumida, as etapas para o desenvolvimento de um programa. Diga quais são as quatro etapas
mais importantes e justifique.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 170
3. Faça as especificações de um programa que calcula o ajuste de um conjunto de pares ordenados x,y a uma função
polinomial. Isto é, como determinar uma curva (polinomial, 1D = reta, 2D = parábola) usando métodos como
mínimos quadrados?
(a) Monte um diagrama de caso de uso ilustrando cenários de interação do usuário com o programa.
(b) Monte os diagramas de classe incluindo os conceitos de associação, agregação e herança (generalização/espe-
cialização). Justifique suas decisões.
(c) Monte diagramas de máquina de estado para alguma classe.
(d) Monte diagramas de atividade para algum método.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 171
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 172
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 173
// Variáveis
float x,y,z, a,b,c;
float media,desvioPadrao;
double area, perimetro, volume;
double limiteInferior, limiteSuperior;
float vetorDados [100];
// Funções
// Calcula área de uma figura
double Area(..);
double Perimetro(..);
double Volume(..);
// Calcula área de uma função
double IntegralSimpson(..);
double IntegralTrapezio(..);
// Função de uma variável
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 174
Monte o diagrama UML de um programa equivalente em C++ (diagrama de classes com atributos, métodos e
associações).
Dica: você deve agrupar atributos e métodos que se relacionam dentro de classes.
2. Para o diagrama de classes a seguir, acrescente alguns atributos e métodos (e eventualmente classes) e estabeleça
as relações entre as classes (associações, agregações e heranças).
• Exemplos de atributos: nome, número, capacidade, valor, data, dimensões, sexo, idade, extensão, entre outros.
• Exemplos de métodos: Contratar(), Despedir(), Abastecer(), Limpar(), PrepararPouso(), ConferirPassagem(),
Manutenção(), ApertarCinto(), MoverFlaps(), CheckIn(), entre outros.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 175
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 176
3. Faça a análise dinâmica de um software que será utilizado para (consultar livro de métodos numéricos):
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 177
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 178
(d) "caracterização de propriedades petrofísicas de rochas reservatório utilizando análise de imagens (imagens
de amostras de calha ou testemunho)". Como exemplo de propriedades temos: porosidade, permeabilidade,
distribuição do tamanho de poros, distribuição do tamanho de sólidos.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 179
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 180
(d) "caracterização de propriedades petrofísicas de rochas reservatório utilizando análise de imagens (imagens
de amostras de calha ou testemunho)". Como exemplo de propriedades temos: porosidade, permeabilidade,
distribuição do tamanho de poros, distribuição do tamanho de sólidos.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 181
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Referências Bibliográcas
[Ann L. Winblad, 1990] Ann L. Winblad, e. a. (1990). Object-Oriented Software. Addison-Wesley.
[Blaha and Rumbaugh, 2006] Blaha, M. and Rumbaugh, J. (2006). Modelagem e Projetos Baseados em Objetos com
UML 2. Campus, Rio de Janeiro.
[Booch, 1986] Booch, G., editor (1986). Object-oriented development, volume 12 of IEEE Transactions on Software
Engineering.
[Coad and Yourdon, 1993] Coad, P. and Yourdon, E. (1993). Análise Orientada a Objeto. Campus, São Paulo.
[de Matos, 2002] de Matos, A. V. (2002). UML - Prático e descomplicado. Érica, Rio de Janeiro.
182
Prefácio 183
[Eric Freeman, 2020] Eric Freeman, E. R. (2020). Head First Design Patterns: Building Extensible and Maintainable
Object-Oriented Software. O’Reilly Media, 2 edition. ISBN-13: 978-1492078005.
[Erich Gamma and Vlissides, 1994] Erich Gamma, Richard Helm, R. J. and Vlissides, J. (1994). Design Patterns. Addison
Wesley, New York.
[Fowler and Scott, 2000] Fowler, M. and Scott, K. (2000). UML Essencial. Bookman, São Paulo.
[Gamma et al., 1994] Gamma, E., Helm, R., Johnson, R., and Vlissides, J. (1994). Design patterns: elements of reusable
object-oriented software. Pearson Education.
[Guedes, 2018] Guedes, G. T. A. (2018). UML Uma Abordagem Prática. novatec, São Paulo.
[Korson and Macgregor, 92] Korson, T. and Macgregor, J. D. (92). Technical criteria for the specification and evaluation
of object oriented libraries. Software Engineering journal, pages 85–94.
[Lee, 2019] Lee, G. (2019). Modern Programming: Object Oriented Programming and Best Practices: Deconstruct object-
oriented programming and use it with other programming paradigms to build applications. ISBN-13: 978-1838986186.
[McLaughlin et al., 2006] McLaughlin, B. D., Pollice, G., and West, D. (2006). Head First Object-Oriented Analysis and
Design. O’Reilly. ISBN-13: 978-0596008673.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 184
[Melo, 2004] Melo, A. C. (2004). Desenvolvendo Aplicações com UML - Do conceitual à implementação. Brasport, Rio
de Janeiro.
[Noback, 2020] Noback, M. (2020). Object Design Style Guide: Powerful techniques for creating flexible, readable, and
maintainable object-oriented code in any OO language. Manning Publications. ISBN-13 : 978-1617296857.
[Palmer and Felsing, 2002] Palmer, S. R. and Felsing, J. M. (2002). A Practical Guide to Feature-Driven Development.
Prentice Hall, 1 edition.
[Pressman, 2002] Pressman, R. S. (2002). Engenharia de Software. MCGraw Hill, Rio de Janeiro, 5 edition.
[Puri, 2009] Puri, C. P. (2009). Agile Management: Feature Driven Development. Global India Publications Pvt Ltd, 1
edition.
[R and B, 1998] R, J. and B, F. (1998). Designing reusable classes. JOOP, pages 22–35.
[Rezende, 2002] Rezende, D. A. (2002). Engenharia de Software e Sistemas de Informação. Brasport, Rio de Janeiro.
[Rumbaugh et al., 1994] Rumbaugh, J., Blaha, M., Premerlani, W., Eddy, F., and Lorensen, W. (1994). Modelagem e
Projetos Baseados em Objetos. Edit. Campus, Rio de Janeiro.
[Silva, 2001] Silva, D. M. D. (2001). UML - Guia De Consulta Rápida. Novatec, São Paulo.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 185
[Winblad and others., 1993] Winblad, A. L. and others. (1993). Software Orientado a Objeto, volume 1. Makron Books,
São Paulo.
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Índice Remissivo
Ambiente gráfico, 104 composições, 54
Ambientes de desenvolvimento, 106 comunicação, 72
Análise orientada a objeto, 45, 46, 62 Concepção, 21
AOO, 45, 46, 62 Controle, 95
Associações, 52 controle, 99
assuntos, 37
Diagrama de atividade, 82
Biblioteca gráfica, 104 Diagrama de caso de uso, 24
biblioteca gráfica, 104 Diagrama de classes, 51
bibliotecas, 102 Diagrama de classes com associações, 52
Diagrama de classes com heranças, 56
casos de uso, 24
Diagrama de colaboração, 72
colaboração, 72
Diagrama de componentes, 37, 114
componentes, 37
186
Prefácio 187
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno
Prefácio 188
Reuso, 161
Seleção de bibliotecas externas, 102
Teste, 140
Teste de Software, 140
Programação Orientada a Objeto com C++ Moderno [3 edição rascunho] André Duarte Bueno