Escolar Documentos
Profissional Documentos
Cultura Documentos
Introdução
a classes
e objetos
• Programas do Capítulo 2
– Todas as instruções estavam localizadas na função main.
• Em geral
– Os programas consistirão
• Na função main e
• Em uma ou mais classes
– Cada uma conterá membros de dados e funções-
membro.
3
Copyright © 2006 by Pearson Education
3.2 Classes, objetos, funções-membro e
membros de dados
• Revisão de classes: exemplo do carro
– As funções descrevem os mecanismos responsáveis pela
execução de tarefas; a aceleração, por exemplo.
• Tarefas complexas são ocultadas do usuário. Por exemplo, o
motorista pode usar o pedal do acelerador, mas não precisa
saber como se dá o processo de aceleração.
– Para ser usadas, as classes devem ser definidas antes. E os
carros, para ser dirigidos, também devem ser construídos
antes.
– Assim como muitos objetos de carro podem ser criados na
mesma classe, muitos carros podem ser construídos com o
mesmo desenho de engenharia.
4
Copyright © 2006 by Pearson Education
3.2 Classes, objetos, funções-membro e
membros de dados (cont.)
• Revisão de classes: exemplo do carro (cont.)
– As chamadas de função-membro enviam mensagens a um
objeto para executar determinadas tarefas, do mesmo
modo que pisar do acelerador envia uma mensagem ao
carro para que acelere.
– Objetos e carros possuem atributos, como cor e
quilômetros rodados.
5
Copyright © 2006 by Pearson Education
3.3 Visão geral dos exemplos do capítulo
• Sete exemplos simples
– Exemplos usados para construir uma classe GradeBook.
• Tópicos cobertos:
– Funções-membro
– Membros de dados
– Clientes de uma classe
• Outras classes ou funções que chamam as funções-membro
dos objetos dessa classe.
– Separando a interface da implementação
– Validação de dados
• Garante que os dados em um objeto estejam em um
determinado formato ou intervalo.
6
Copyright © 2006 by Pearson Education
3.4 Definindo uma classe com uma
função-membro
• Definição de classe
– Indica ao compilador que funções-membro e membros de
dados pertencem à classe.
– Palavra-chave class seguida do nome da classe.
– O corpo da classe é colocado entre chaves ({}).
• Especifica membros de dados e funções-membro.
• Especificador de acesso public:
– Indica que uma função-membro ou membro de dados é
acessível a outras funções e funções-membro de outras
classes.
7
Copyright © 2006 by Pearson Education
Resumo
fig03_01.cpp
A função-membro displayMessage
não retorna nada.
8
Copyright © 2006 by Pearson Education
Erro comum de programação 3.1
9
Copyright © 2006 by Pearson Education
3.4 Definindo uma classe com uma
função-membro (cont.)
• Definição de função-membro
– Tipo de retorno de uma função
• Indica o tipo de valor retornado pela função quando ela
finaliza uma tarefa.
• void indica que a função não retorna nenhum valor.
– Os nomes de função devem ser um identificador válido.
– Os parênteses após o nome da função indicam que ela é
uma função.
– O corpo da função contém instruções que executam a
tarefa da função.
• Encontra-se entre chaves ({}).
10
Copyright © 2006 by Pearson Education
Erro comum de programação 3.2
11
Copyright © 2006 by Pearson Education
Erro comum de programação 3.3
12
Copyright © 2006 by Pearson Education
3.4 Definindo uma classe com uma
função-membro (cont.)
• Usando uma classe
– Uma classe é um tipo definido pelo usuário (ou um tipo
definido pelo programador).
• Pode ser utilizada para criar objetos.
– Variáveis do tipo da classe
• C++ é uma linguagem extensível.
– Operador ponto (.)
• É usado para acessar membros de dados e funções-membro
de um objeto.
• Exemplo
– myGradeBook.displayMessage()
• Chama a função-membro displayMessage do objeto
myGradeBook de GradeBook.
13
Copyright © 2006 by Pearson Education
Fig. 3.2 | Diagrama de classes UML indicando que a classe GradeBook tem uma
operação displayMessage pública.
14
Copyright © 2006 by Pearson Education
3.4 Definindo uma classe com uma
função-membro (cont.)
• Diagrama de classes
– Um retângulo com três compartimentos
• O compartimento superior contém o nome da classe.
• O compartimento do meio contém os atributos da classe.
• O compartimento inferior contém as operações da classe.
– Quando há um sinal (+) na frente de uma operação, isso
indica que ela é pública.
15
Copyright © 2006 by Pearson Education
3.5 Definindo uma função-membro com
um parâmetro
• Parâmetro(s) de função
– Informação necessária para que uma função execute sua
tarefa.
• Argumento(s) de função
– Valores fornecidos por uma chamada de função a cada
parâmetro da função.
• Os valores de argumento são copiados nos parâmetros de
função.
16
Copyright © 2006 by Pearson Education
3.5 Definindo uma função-membro com
um parâmetro (cont.)
• Uma string
– Representa uma string de caracteres.
– É um objeto da classe std::string da C++ Standard
Library.
• É definida no arquivo de cabeçalho <string>.
• Função de biblioteca getline
– Usada para recuperar uma entrada até que uma nova
linha seja encontrada.
– Exemplo
• getline( cin, nameOfCourse );
– Gera uma linha da entrada-padrão na string object
nameOfCourse.
17
Copyright © 2006 by Pearson Education
Resumo
fig03_03.cpp
(1 de 2)
Parâmetro de função-membro.
O parâmetro de função é
usado como uma variável.
18
Copyright © 2006 by Pearson Education
Resumo
fig03_03.cpp
(2 de 2)
Passando um
argumento à função-
membro.
19
Copyright © 2006 by Pearson Education
3.5 Definindo uma função-membro com
um parâmetro (cont.)
• Lista de parâmetros
– Informações adicionais necessárias a uma função.
– Encontra-se entre parênteses após o nome da função.
– A função pode ter qualquer número de parâmetros.
• Os parâmetros são separados por vírgula.
– O número, ordem e tipo de argumento em uma chamada
de função deve corresponder ao número, ordem e tipo de
parâmetro na lista de parâmetros da função chamada.
– Modelada em UML
• Nome do parâmetro, seguido de dois-pontos e do tipo de
parâmetro entre os parênteses da função-membro.
20
Copyright © 2006 by Pearson Education
Erro comum de programação 3.4
21
Copyright © 2006 by Pearson Education
Erro comum de programação 3.5
22
Copyright © 2006 by Pearson Education
Boa prática de programação 3.1
23
Copyright © 2006 by Pearson Education
Boa prática de programação 3.2
24
Copyright © 2006 by Pearson Education
Fig. 3.4 | Diagrama de classes UML indicando que a classe GradeBook tem uma
operação displayMessage com um parâmetro courseName do
tipo UML String.
25
Copyright © 2006 by Pearson Education
3.6 Membros de dados, funções set e
funções get
• Variáveis locais
– Variáveis declaradas no corpo de uma definição de função.
• Não podem ser utilizadas fora do corpo dessa função.
– Quando uma função termina
• Os valores das respectivas variáveis locais são perdidos.
• Atributos
– Existem por toda a vida do objeto.
– São representados como membros de dados.
• Variáveis em uma definição de classe
– Todo objeto de classe mantém sua própria cópia de
atributos.
26
Copyright © 2006 by Pearson Education
Resumo
fig03_05.cpp
(1 de 3)
27
Copyright © 2006 by Pearson Education
Resumo
fig03_05.cpp
(2 de 3)
28
Copyright © 2006 by Pearson Education
Resumo
fig03_05.cpp
(3 de 3)
Acessando dados
private
externamente à
definição de classe.
29
Copyright © 2006 by Pearson Education
Boa prática de programação 3.3
30
Copyright © 2006 by Pearson Education
3.6 Membros de dados, funções set e
funções get (cont.)
• Especificador de acesso private
– Torna um membro de dados ou uma função-membro
acessível apenas a funções-membro da classe.
– private é o acesso-padrão de membros de classe.
– Oculta dados.
• Retornando um valor de uma função
– Uma função que especifica um tipo de retorno diferente de
void.
• Retorna um valor à sua função de chamada.
31
Copyright © 2006 by Pearson Education
Observação de engenharia de
software 3.1
Como regra geral, os membros de dados devem ser
declarados private e as funções-membro devem ser
declaradas public. (Veremos que é apropriado
declarar certas funções-membro private se elas
precisarem ser acessadas somente por outras funções-
membro da classe.)
32
Copyright © 2006 by Pearson Education
Erro comum de programação 3.6
33
Copyright © 2006 by Pearson Education
Boa prática de programação 3.4
34
Copyright © 2006 by Pearson Education
Boa prática de programação 3.5
35
Copyright © 2006 by Pearson Education
Observação de engenharia de
software 3.2
Aprenderemos no Capítulo 10, “Classes: Um exame mais
profundo, parte 2”, que funções e classes declaradas por
uma classe como friends podem acessar os membros
private da classe.
36
Copyright © 2006 by Pearson Education
Dica de prevenção de erro 3.1
37
Copyright © 2006 by Pearson Education
Erro comum de programação 3.7
38
Copyright © 2006 by Pearson Education
3.6 Membros de dados, funções set e
funções get (cont.)
• Engenharia de software com funções set e get
– Funções-membro public que permitem a clientes de uma
classe atribuir ou obter valores de membros de dados
private.
– As funções set às vezes são chamadas de modificadoras e as
funções get às vezes são chamadas de funções de acesso.
– Permite que o criador da classe controle a forma como os
clientes acessam dados private.
– Deve também ser utilizada por outras funções-membro da
mesma classe.
39
Copyright © 2006 by Pearson Education
Boa prática de programação 3.6
40
Copyright © 2006 by Pearson Education
Observação de engenharia de
software 3.3
É importante escrever programas compreensíveis e fáceis
de manter. A mudança é a regra, e não a exceção. Os
programadores têm de saber de antemão que seu código
será modificado.
41
Copyright © 2006 by Pearson Education
Observação de engenharia de
software 3.4
O designer de classes não precisa fornecer as funções get
e set para cada item de dados private; essas
capacidades devem ser fornecidas somente quando
apropriado. Quando um serviço for útil ao código-
cliente, em geral deve ser fornecido na interface
public da classe.
42
Copyright © 2006 by Pearson Education
3.6 Membros de dados, funções set e
funções get (cont.)
• Diagrama UML
– Indicando o tipo de retorno de uma operação
• Insira dois-pontos e o tipo de retorno após os parênteses que
se seguem ao nome da operação.
– O sinal de menos é utilizado para indicar membros
private.
43
Copyright © 2006 by Pearson Education
Fig. 3.6 | Diagrama de classes UML para a classe GradeBook com um atributo privado
courseName e operações públicas setCourseName,
getCourseName e displayMessage.
44
Copyright © 2006 by Pearson Education
3.7 Inicializando objetos com
construtores
• Construtores
– As funções são utilizadas para inicializar dados de um
objeto no momento em que esse objeto é criado.
• Uma chamada torna-se implícita quando um objeto é criado.
• Os construtores devem ser definidos com o mesmo nome da
classe.
• Não podem retornar valores.
– Nem mesmo void.
– O construtor-padrão não tem nenhum parâmetro.
• O compilador fornecerá um quando uma determinada classe
não incluir explicitamente um construtor.
– O construtor-padrão do compilador chama apenas
construtores de membros de dados que são objetos de
classe.
45
Copyright © 2006 by Pearson Education
Resumo
fig03_07.cpp
(1 de 2)
46
Copyright © 2006 by Pearson Education
Resumo
fig03_07.cpp
(2 de 2)
47
Copyright © 2006 by Pearson Education
Dica de prevenção de erro 3.2
48
Copyright © 2006 by Pearson Education
Observação de engenharia de
software 3.5
Os membros de dados podem ser inicializados em um
construtor da classe ou seus valores podem ser
configurados depois que o objeto for criado. Entretanto,
é uma boa prática de engenharia de software assegurar
que um objeto seja completamente inicializado antes de
o código-cliente invocar as funções-membro do objeto.
Em geral, você não deve contar com o código-cliente
para assegurar que um objeto seja inicializado
adequadamente.
49
Copyright © 2006 by Pearson Education
3.7 Inicializando objetos com
construtores (cont.)
• Construtores em um diagrama de classes UML
– Aparecem no terceiro compartimento, com operações.
– Para distinguir um construtor das operações de uma classe
• O UML insere a palavra ‘constructor’ entre aspas francesas
após o nome do construtor.
– <<constructor>>
– Em geral, são colocados antes de outras operações.
50
Copyright © 2006 by Pearson Education
Fig. 3.8 | Diagrama de classes UML indicando que a classe GradeBook tem um
construtor com um parâmetro name de tipo UML String.
51
Copyright © 2006 by Pearson Education
3.8 Colocando uma classe em um
arquivo separado para reusabilidade
• O arquivo .cpp é conhecido como um arquivo de
código-fonte.
• Arquivos de cabeçalho
– Arquivos separados nos quais são colocadas as definições
de classe.
• Permitem que o compilador reconheça as classes quando
usadas em outros lugares.
– Em geral, usam a extensão de nome de arquivo.h
• Arquivos de driver
– Programa usado para testar software (como classes).
– Contém uma função main para que possa ser executado.
52
Copyright © 2006 by Pearson Education
Resumo
fig03_09.cpp
(1 de 2)
53
Copyright © 2006 by Pearson Education
Resumo
fig03_07.cpp
(2 de 2)
54
Copyright © 2006 by Pearson Education
Resumo
fig03_10.cpp
Incluir o arquivo de
cabeçalho faz com que a
definição de classe seja
copiada no arquivo.
55
Copyright © 2006 by Pearson Education
3.8 Colocando uma classe em um arquivo
separado para reusabilidade (cont.)
• Diretiva #include do pré-processador
– Usada para incluir arquivos de cabeçalho.
• Instrui o pré-processador C++ a substituir a diretiva por uma
cópia do conteúdo do arquivo especificado.
– As aspas indicam arquivos de cabeçalho definidos pelo
usuário.
• O pré-processador primeiramente procura no diretório atual.
– Se o arquivo não for encontrado, procura no diretório da
C++ Standard Library.
– A C++ Standard Library é representada por colchetes
angulares.
• O pré-processador procura apenas no diretório da C++
Standard Library.
56
Copyright © 2006 by Pearson Education
3.8 Colocando uma classe em um arquivo
separado para reusabilidade (cont.)
• Criando objetos
– O compilador deve conhecer o tamanho do objeto.
• Os objetos C++ em geral contêm apenas membros de dados.
• O compilador cria uma cópia das funções-membro da classe.
– Essa cópia é compartilhada por todos os objetos da
classe.
57
Copyright © 2006 by Pearson Education
Dica de prevenção de erro 3.3
58
Copyright © 2006 by Pearson Education
3.9 Separando a interface da
implementação
• Interface
– Descreve os serviços que os clientes de uma classe podem
usar e como podem solicitar esses serviços.
• Mas não revela como a classe executa esses serviços.
• Definição de classe que relaciona apenas o nome das funções-
membro, tipos de retorno e tipos de parâmetro.
– Protótipos de função
– A interface de uma classe consiste nas funções-membro
public da classe (serviços).
• Separando a interface da implementação
– O código-cliente não deve ser quebrado se a
implementação mudar e a interface permanecer a mesma.
59
Copyright © 2006 by Pearson Education
3.9 Separando a interface da
implementação (cont.)
• Separando a interface da implementação (cont.)
– Defina as funções-membro fora da definição de classe, em
um arquivo de código-fonte separado.
• Em um arquivo de código-fonte para uma classe
– Use um operador de resolução de escopo binário (::)
para unir cada função-membro à definição de classe.
• Os detalhes da implementação são ocultados.
– O código-cliente não precisa conhecer a implementação.
– Em um arquivo de cabeçalho para uma classe
• Os protótipos de função descrevem a interface public da
classe.
60
Copyright © 2006 by Pearson Education
Resumo
fig03_11.cpp
61
Copyright © 2006 by Pearson Education
Erro comum de programação 3.8
62
Copyright © 2006 by Pearson Education
Boa prática de programação 3.7
63
Copyright © 2006 by Pearson Education
Dica de prevenção de erro 3.4
64
Copyright © 2006 by Pearson Education
Erro comum de programação 3.9
65
Copyright © 2006 by Pearson Education
Resumo
fig03_12.cpp
(1 de 2)
A implementação
GradeBook é colocada
em um arquivo de
código-fonte separado.
Inclui o arquivo
de cabeçalho para
acessar o nome de
classe
GradeBook.
66
Copyright © 2006 by Pearson Education
Resumo
fig03_12.cpp
(2 de 2)
67
Copyright © 2006 by Pearson Education
Resumo
fig03_13.cpp
68
Copyright © 2006 by Pearson Education
3.9 Separando a interface da
implementação (cont.)
• O processo de compilação e vinculação
– O arquivo do código-fonte é compilado para criar o código-
objeto da classe (o arquivo do código-fonte deve #incluir
o arquivo de cabeçalho).
• O programador de implementação de classes precisa apenas
fornecer o arquivo de cabeçalho e o código-objeto ao cliente.
– O cliente deve #incluir o arquivo de cabeçalho em seu
próprio código
• Para que o compilador possa assegurar que a função main crie
e manipule corretamente objetos da classe.
– Para criar um aplicativo executável
• O código-objeto do código-cliente deve ser vinculado ao código-
objeto da classe e ao código-objeto de qualquer código-objeto
da Standard Library usado no aplicativo.
69
Copyright © 2006 by Pearson Education
Fig. 3.14 | O processo de compilação e vinculação que produz um aplicativo executável.
70
Copyright © 2006 by Pearson Education
3.10 Validando dados com funções set
71
Copyright © 2006 by Pearson Education
Resumo
fig03_15.cpp
72
Copyright © 2006 by Pearson Education
Resumo
fig03_16.cpp
(1 de 2)
73
Copyright © 2006 by Pearson Education
Resumo
fig03_16.cpp
(2 de 2)
74
Copyright © 2006 by Pearson Education
Resumo
fig03_17.cpp
(1 de 2)
75
Copyright © 2006 by Pearson Education
Resumo
fig03_17.cpp
(2 de 2)
76
Copyright © 2006 by Pearson Education
Observação de engenharia de
software 3.6
Tornar os membros de dados private e controlar o
acesso, especialmente o acesso de gravação, àqueles
membros de dados via funções-membro public ajuda a
assegurar a integridade dos dados.
77
Copyright © 2006 by Pearson Education
Dica de prevenção de erro 3.5
78
Copyright © 2006 by Pearson Education
Observação de engenharia de
software 3.7
As funções-membro que configuram (set) os valores de
dados private devem verificar se os novos valores
projetados são adequados; se não forem, as funções set
devem colocar os membros de dados private em um
estado apropriado.
79
Copyright © 2006 by Pearson Education
3.11 Estudo de caso de engenharia de
software: identificando as classes no
documento de requisitos do ATM (opcional)
80
Copyright © 2006 by Pearson Education
Fig. 3.18 | Substantivos e substantivos compostos no documento de requisitos.
81
Copyright © 2006 by Pearson Education
3.11 Estudo de caso de engenharia de software:
identificando as classes no documento de
requisitos do ATM (opcional) (cont.)
• Modelando classes com diagramas de classes UML
– O compartimento superior contém o nome da classe.
– O compartimento do meio contém atributos.
– O compartimento inferior contém operações.
– O diagrama elidido
• Suprime alguns atributos de classe e operações para melhorar a
legibilidade.
– Uma associação
• É representada por uma linha sólida que conecta duas classes.
• Pode ser nomeada.
• Os números próximos do fim de cada linha são valores de
multiplicidade.
• O nome de papel identifica o papel desempenhado por um objeto
em uma associação.
82
Copyright © 2006 by Pearson Education
Fig. 3.19 | Representando uma classe na UML utilizando um diagrama de classes.
83
Copyright © 2006 by Pearson Education
Fig. 3.20 | Diagrama de classes que mostra uma associação entre classes.
84
Copyright © 2006 by Pearson Education
Fig. 3.21 | Tipos de multiplicidade.
85
Copyright © 2006 by Pearson Education
3.11 Estudo de caso de engenharia de software:
identificando as classes no documento de requisitos
do ATM (opcional) (cont.)
• Relacionamento de composição
– Indicado por losangos sólidos anexados a linhas de
associação.
– Propriedades de composição
• Somente uma classe pode representar o todo.
• As partes só existem quando o todo existe. O todo cria e destrói
as partes.
• Uma parte só pode pertencer a um todo uma vez.
• Os losangos sem preenchimento indicam agregação
– Uma forma mais fraca de composição.
• Tipos de associação
– Um para um
– Um para muitos
– Muitos para um
86
Copyright © 2006 by Pearson Education
Fig. 3.22 | Diagrama de classes mostrando os relacionamentos de composição.
87
Copyright © 2006 by Pearson Education
Fig. 3.23 | Diagrama de classes para o modelo do sistema ATM.
88
Copyright © 2006 by Pearson Education
Fig. 3.24 | Diagrama de classes mostrando relacionamentos de composição de uma
classe Car.
89
Copyright © 2006 by Pearson Education
Fig. 3.25 | Diagrama de classes para o modelo do sistema ATM incluindo a classe Deposit.
90
Copyright © 2006 by Pearson Education
Para fazer: lista com 3.5, 3.6, 3.7, 3.8, 3.11, 3.12,
3.13 e 3.15 em trios de até 3
91
Copyright © 2006 by Pearson Education