Академический Документы
Профессиональный Документы
Культура Документы
Programa
Conceitos Bsicos
Projeto de Programas OO
Linguagem C++
Aplicao
(4 horas)
(12 horas)
(12 horas)
(12 horas)
Introduo
Projeto de Programas
de manuteno
Introduo
Abstrao de Dados
TAD
Definio
Introduo
Tcnicas
Programao no estruturada
Programao estruturada
Programao modular
Introduo
Programao no estruturada (espaguete)
Introduo
Programao Estruturada
Introduo
Programao Estruturada
Objetivos
Gerar
Introduo
Vantagens:
Introduo
Programao Modular
Introduo
Como modularizar?
Introduo
Vantagens da Programao Modular
Introduo
Problema:
Soluo:
POO
Orientao para Objetos
POO
Operaes
Estrutura de dados
Dependncia Mtua
Como ficam as estruturas de dados globais?
POO
Decomposio
Coloque juntas todas as decises de projeto relacionadas
Decises de Projeto
Estruturas
Operaes
POO
Elemento capaz de:
POO
O programa decomposto em caractersticas
que so implementadas de acordo com as
mesmas decises de projeto, no mais em
funes desempenhadas.
Objetos e Mtodos
Um objeto composto por um conjunto de
dados privados um conjunto de mtodos
que atuam sobre estes dados.
Objetos e Mtodos
Variveis locais a cada objeto
OBJETO
Dados Privados
Mtodos
Mtodos e Objetos
Em um programa, a declarao de um novo objeto
deve ser constituda dos seus dados privados e de
seus mtodos;
Mtodos:
Mtodos e Objetos
Exemplo
Crculo
X, Y, Raio
CalculaArea
CalculaPerimetro
DesenhaCirculo
Mtodos e Objetos
Como seria a interface do mtodo
CalculaArea?
Como seria sua implementao?
Mtodos e Objetos
Questes
Mtodos e Objetos
Exerccios
Classes, Instncias e
Mensagens
Classe: Modelo a partir do qual os objetos
so criados;
Exemplo:
Tom, Garfield, Frajola, Manda-chuva e
Batatinha. So todos da mesma classe: Gatos
Classes, Instncias e
Mensagens
Uma melhor definio:
Classe um agrupamento de objetos que
revelam profundas semelhanas entre si,
tanto no aspecto estrutural quanto no
funcional.
Classes, Instncias e
Mensagens
Uma classe um tipo definido pelo usurio
que contm o molde, a especificao para os
objetos, assim como o tipo inteiro contm o
molde para as variveis declaradas como
inteiros. A classe envolve, associa, mtodos e
dados, controlando o acesso a estes, defini-la
implica em especificar os seus ATRIBUTOS
(dados) e seus SERVIOS (cdigo).
Classes, Instncias e
Mensagens
Uma representao grfica para as classes
Nome da Classe
Caracterstica comum
aos objetos descritos
pela classe
Atributos
Servios
Classes, Instncias e
Mensagens
TODO OBJETO UMA INSTNCIA DE
UMA CLASSE
OBJETOS SO CRIADOS DURANTE A
EXECUO DO PROGRAMA, E
OCUPAM ESPAO NA MEMRIA
TODAS AS INSTNCIAS DE UMA
CLASSE OBEDECEM AO MESMO
PROTOCOLO
Classes, Instncias e
Mensagens
Serra Eltrica
Serra Eltrica
Motor
Cabo
eltrico
Correia
Martelete
Disco de
serra
Furadeira
Prensa
Classes, Instncias e
Mensagens
PROTOCOLO: o conjunto de mtodos
implementados para uma classe
VARIVEIS DE INSTNCIA: Elementos
que compe a coleo de dados privados de
uma classe
ESTADO INTERNO: Conjunto de valores
assumidos pelas variveis de instncia
Classes, Instncias e
Mensagens
Classe
Parte privada
Variveis de
Instncia e
mtodos
Protocolo
Parte visvel
Classes, Instncias e
Mensagens
Exemplo
CanetaGrfica
Coordenadas
MoveTo
LineTo
Classes, Instncias e
Mensagens
Estado interno
Bic
Paker
20
X 200
Y
Variveis de instncia
Instncias da classe CanetaGrfica
10
Classes, Instncias e
Mensagens
Um estado interno de um objeto muda cada
vez que se modifica o valor de uma de suas
variveis de instncia.
interessante que os objetos possuam um
estado inicial conhecido (construtores).
Mtodos destrutores so utilizados para
liberar a memria.
Classes, Instncias e
Mensagens
Mensagem: Ativa um mtodo de um objeto
Mensagem
Resposta
mquina A
t=0
Lig = FALSE
mquina A
t = 50
Lig = TRUE
Mquina(50, TRUE)
t = 50
Lig = TRUE
Resposta
Resultado da execuo do mtodo
Mensagem
Composta por um seletor e um conjunto de parmetros
Classes, Instncias e
Mensagens
Questes
Classes, Instncias e
Mensagens
Objeto 2
Dados
Objeto 1
Dados
Objeto 6
Dados
Objeto 3
Dados
Objeto n
Dados
Objeto 4
Dados
Objeto 5
Dados
Encapsulamento
Impede ao cliente enxergar os detalhes da
implementao do objeto
Sistema
Interface
Interface
Parte
Privada
O que o cliente v
O que o projetista v
Encapsulamento
O Encapsulamento favorece o ocultamento
da informao (information hiding),
possibilitando que os dados de cada objeto s
sejam acessveis e modificados atravs de
seus mtodos.
Encapsulamento
REGRAS DO ENCAPSULAMENTO
Regra 1
Apenas
Regra 2
A resposta
Encapsulamento
Conseqncias
Encapsulamento
Se um valor for utilizado por um mtodo ele
pode ser:
Uma
Encapsulamento
Reusabilidade: reaproveitamento dos
componentes. Com o encapsulamento os
objetos se tornam mais reutilizvel.
Aumenta a produtividade.
Encapsulamento
Manutenabilidade: Impacto que as
modificaes causam no funcionamento de
um sistema.
O encapsulamento favorece mudanas com
efeitos mnimos e bem localizados
Encapsulamento
Questes
Encapsulamento
Exerccios
Herana e Polimorfismo
Herana um mecanismo simples e
poderoso que permite que uma nova classe
seja descrita a partir de outra classe j
existente, herdando as suas propriedades.
Herana e Polimorfismo
Diz-se que uma subclasse herda os mtodos e as
variveis de instncia de uma superclasse.
Herana e Polimorfismo
classe B
Dados B
Mtodos B
classe C
Dados B
Dados C
Mtodos B
Mtodos C
Herana e Polimorfismo
Representao grfica
para a Herana
superclasse
Especializao
subclasses
Herana e Polimorfismo
Hierarquia de classes
Herana e Polimorfismo
classe A
classe B
Dados A
Mtodos A
Dados B
Mtodos B
classe C
Dados A
Dados B
Dados C
Mtodos A
Mtodos B
Mtodos C
A herana mltipla
Herana e Polimorfismo
Polimorfismo
Herana e Polimorfismo
Polimorfismo
Herana e Polimorfismo
Quando uma mensagem enviada a um
objeto polimrfico, no possvel determinar
previamente qual o endereo do objeto. E
agora?
O mecanismo que permite a resoluo de
endereos em tempo de execuo chama-se
ligao dinmica.
Herana e Polimorfismo
Extensibilidade: Vantagem adicional obtida
com o uso da herana e do polimorfismo.
Permite que uma subclasse seja criada para
incorporar os requisitos especficos de uma
nova aplicao.
Herana e Polimorfismo
Concluses
Herana e Polimorfismo
Questes
Herana e Polimorfismo
Exerccios
Significado em C++
Em C++, a palavra reservada class
representa um novo tipo de dado que uma
extenso do tipo struct.
Objeto
Dados de
estado
Mensagem
Mtodo
So definies de funo.
Subclasse
Construtor
ClassTempo{
public:
Time();
voidSetTime(int,int,int);
Interface de classe
voidPrintPadrao();
voidPrintMilitar();
private:
inthora;
S so acessados por funes
intminuto;
intsegundo;
membro ou friend
};
Tempo::Tempo{
hora=0;
minuto=0;
segundo=0;
}
voidTime::SetTime(inth,intm,ints){
hora=(h>=0&&h<24)?h:0;
minuto=(m>=0&&m<60)?m:0;
segundo=(s>=0&&s<60)?S:0;
}
voidTime::PrintMilitar(){
cout<<(hora<10?0:)<<hora<<:
<<(minuto<10?0:)<<minuto;
}
Completar
da classe (inline);
Usual:
Definies (prottipos das funes membro e dados) em
arquivo cabealho;
Implementao em arquivo .cpp;
void TPessoa::Anda(void)
{
...
}
intTempo(int,*int)
(prototipodeclaradonaclasseTempo)
ClassTempo{
public:
Time();
voidSetTime(int,int,int);
voidPrintPadrao();
voidPrintMilitar();
private:
inthora=0;
intminuto=0;
intsegundo=0;
};
//operacoes de comparacao
int igual(fracao t);
int diferente(fracao t);
int maiorouigual(fracao t);
//operacoes de input output
void mostra(void); //exibe fracao no video
void cria(void); //pergunta ao usuario o valor da fracao
//operacoes de conversao de tipos
double convertedbl(void); //converte para double
long convertelng(void); //converte para long
};
void fracao::simplifica(void)
{
long commd;
commd=mdc(num,den);
//divisor comum
num=num/commd;
den=den/commd;
if (den<0) { den=-den; num=-num;};
//move sinal para cima
}
fracao::fracao(long t,long m)
{
num=(t);
den=(m);
simplifica(); //chamada para o mesmo objeto.
}
int fracao::maiorouigual(fracao t)
{
return ((num*t.den)>=(t.num*den));
}
void fracao::mostra(void)
{
cout << "(" << num << "/" << den << ")";
}
void fracao::cria(void)
{
cout << "Numerador:";
cin >> num;
cout << "Denominador:";
cin >> den;
simplifica();
}
Ponteiros em C++
a=new int(3);
//aloca memoria para o apontado por a, gravando neste o valor 3
cout << (*a) << endl ;
//imprime o valor do apontado por a
delete a;
//desaloca memoria
}
Alocao Esttica
class vetor_tres
{
public:
int vet[3]; //vetor alocado estaticamente numa classe.
vetor_tres(int a,int b,int c)
{ vet[0]=a; vet[1]=b; vet[2]=c; }
//construtor do vetor
void mostra(void)
{ cout << vet[0] << " " << vet[1] << " " << vet[2] << endl;}
//funcao membro para mostrar o conteudo do vetor
};
Alocao Dinmica
TAD Vetor
class vetor{
private:
int* v;
//este e' o vetor
int tamanho; //tamanho maximo do vetor,
public:
vetor (int tam); //construtor, aloca memria para o vetor.
void atribui(int index,int valor); //altera uma posicao do vetor
int conteudo(int index);
//retorna conteudo de posicao do vetor
int maximo(void);
//retorna o maior elemento do vetor
int primeiro(void);
//primeiro indice do vetor
int ultimo(void);
//ultimo indice do vetor
~vetor() {delete v;}
//inline function ou use delete v[];
};
Projeto de Programas OO
a forma pela qual o programador cria o modelo
em forma de programa. o processo onde se coloca
as partes importantes de um programa em ordem.
Estabelecer quais as classes, objetos e mtodos so
necessrios para um programa, e definir quais
classes e objetos devem se interrelacionar.
Projeto de Programas OO
3 Etapas
Projeto de Programas OO
Refinamento do Protocolo
Estender
Projeto de Programas OO
efeito
como
vrios
classe
Projeto de Programas OO
Projeto de Programas OO
Uma quarta etapa pode ser a construo das
tabelas CRC (Classe, Responsabilidade,
Correspondncia).
Projeto de Programas OO
sempre bom lembrar:
Variveis da classe
S existe uma cpia de cada varivel
Todos as instncias acessam a mesma cpia das variveis
So criadas apenas uma vez assim que o sistema reconhece a classe
Variveis da Instncia
Existe uma cpia para cada instncia criada
Cada instncia acessa a sua cpia
So criadas sempre quando uma nova instncia gerada
Projeto de Programas OO
Mtodos de Classe
Podem acessar apenas variveis da classe
Podem ser acessados pela classe ou pela instncia
Mtodos de Instncia
Podem acessar variveis da classe e da instncia
S podem ser acessados por instncias
Projeto de Programas OO
Para que objetos se comuniquem eles precisam se relacionar
Associao: conexo entre classes
Agregao: especializao de uma associao onde um todo
relacionado com suas partes (relacionamento parte-de ou conteno
Herana: um dos princpios da OO, permite a reutilizao, uma nova
classe pode ser definida a partir de outra j existente
Projeto de Programas OO
Associao:
descreve uma relao entre duas classes
Usurio possui bicicleta
Agregao:
descreve o relacionamento entre um todo e sua parte
so indicadas por frases do tipo tem um, parte de
Uma teclado parte de um notebook
Projeto de Programas OO
Generalizao / Herana
descreve o relacionamento entre classes definidas a partir de outras
classes.
toda a subclasse herda os estados e os comportamentos definidos na
superclasse
as subclasses no esto limitadas a estes estados e comportamentos.
Uma mountain bike uma bicicleta
Projeto de Programas OO
Uma associao usualmente um relacionamento bidirecional
Dado uma instncia de Aluno, h um objeto Disciplina associado
Dado uma instncia de Disciplina, h um objeto Aluno associado
Aluno
Disciplina
Projeto de Programas OO
Tipos de associaes
Unidirecional
Bidirecional
Indeterminada
Projeto de Programas OO
Classe A
Classe B
unidirecional
ou
Classe A
Classe A
Classe B
Classe B
bidirecional
bidirecional
ou
no determinada
Projeto de Programas OO
Para facilitar seu entendimento, uma associao precisa ser nomeada
- O nome representado como um rtulo colocado
ao longo da linha de associao
- Um nome de associao usualmente um verbo ou uma frase verbal
Aluno
Cursa
Dsiciplina
Projeto de Programas OO
Aluno
cursa
Disciplina
tem
matriculado
Aluno
Cursa
Tem
matriculado
Disciplina
Projeto de Programas OO
Multiplicidade para Associaes
Multiplicidade o nmero de instncias de uma classe
relacionada com UMA instncia de outra classe
Para cada associao, h duas decises a fazer: uma para cada
lado da associao
Por exemplo, na conexo entre Aluno e Disciplina:
Projeto de Programas OO
Muitos
Exatamente um
Zero ou mais
0..
Um ou mais
Zero ou um
1..
Faixa especificada
2..4
Pessoa
*
*
0..1
Disciplina
Aluno
1..*
1..*
Projeto de Programas OO
Associao em C++
E
Exemplo
Sejam
Projeto de Programas OO
class TCliente
{
protected:
int nClientCod;
char* pcNome;
char* pcEndereco;
int* nProdCod; //array de inteiros com todos os produtos que possui
public:
...
}
class TProduto
{
Uma instncia de Cliente sabe todos os
protected:
int nProdCod;
Produtos que possui
char* pcDescri;
public:
...
}
Projeto de Programas OO
class TCliente
{
protected:
int nClientCod;
char* pcNome;
char* pcEndereco;
public:
...
}
class TProduto
Uma instncia de
{
protected:
Cliente a possui
int nProdCod;
char* pcDescri;
int nClientCod; //qual cliente o possui
public:
...
}
Projeto de Programas OO
Observemos agora a relao entre as classes
TAluno e TProfessor. Neste caso temos uma
associao Bidirecional, visto que "Um
Aluno tem vrios Professores e um Professor
tem vrios Alunos".
Projeto de Programas OO
class TAluno
{
protected:
char* pcDRE;
char** pacMatricula; //matriculas dos professores que possui
char* pcNome;
int nIdade;
public:
...
}
class TProfessor
{
protected:
char* pcMatricula;
char*pcNome;
char** pacDRE; //array de strings com DRE dos alunos que possui
public:
...
}
Projeto de Programas OO
Projeto de Programas OO
Agregao
Agregao uma forma especializada de associao
no qual um todo relacionado com sua(s) parte(s)
Projeto de Programas OO
O relacionamento descrito com uma frase parte de
Caractersticas do barramento
Projeto de Programas OO
Todo
Parte1
Parte2
Projeto de Programas OO
Turma
Aluno
1..*
Projeto de Programas OO
Em uma agregao, a parte pode estar contida, ou no, em
mais de um todo.
Quando isto ocorre, chamamos agregao compartilhada
(losango branco).
Quando uma parte no pode estar em mais de um todo,
chamamos composio (losango preto).
Projeto de Programas OO
Departamento
Disciplina
*
Projeto de Programas OO
Associao ou Agregao?
Se dois objetos so altamente acoplados por um
relacionamento todo-parte
Projeto de Programas OO
Curso
Disciplina
1..*
Curso e disciplina so
altamente acoplados (1 curso
formado por 1 ou mais
disciplinas)
Aluno
0..*
3..10
Objetos independentes
Projeto de Programas OO
Identificando Objetos
Em uma sala existe um conjunto de objetos fsicos que podem ser
facilmente identificados, modelados e classificados como objetos OO.
Mas em um problema onde o espao uma aplicao de software, os
objetos podem no ser facilmente encontrados.
Os objetos podem ser identificados analisando-se o problema ou
fazendo um parser gramatical do texto contendo a descrio do
problema
Objetos so determinados sublinhando-se cada substantivo ou orao
(parte de uma frase)
Projeto de Programas OO
Candidatos a objeto:
Entidade externa que produz ou consome informao para ser usada por um sistema
computacional (ex.: outros sistemas, devices, pessoas)
Coisas que so parte do domnio da informao do problema (ex.: um sinal, uma carta,
um display)
Papeis(roles) desempenhados por pessoas que interagem com o sistema (ex.: gerente,
engenheiro, vendedor)
Unidades de organizao que so relevantes a uma aplicao (ex.: divises, grupo, time)
Estruturas que definem a classe de um objeto (ex.: sensor, computador, veculo 4-rodas)
Projeto de Programas OO
Papis
Eventos
Lugar
Coisas
Estrutura
Entidades
externas
Unidades
organizacionais
Nome do objeto
Atributos
Operaes
Projeto de Programas OO
Escolhendo classes
Projeto de Programas OO
Nomes para classes
Projeto de Programas OO
Um guia de estilo deveria ditar convenes de nomeao
para classes
Uma proposta simples:
Projeto de Programas OO
Uma classe deveria capturar uma e somente uma
abstrao chave
Abstrao ruim: classe Aluno que conhece a
informao do aluno e as disciplinas que aquele
aluno est matriculado
Boa abstrao: separar em uma classe para Aluno e
uma classe para Disciplina
Projeto de Programas OO
Semntica da Classe
Aps encontrar o nome da classe, importante que seja feita
uma breve (mas concisa) descrio da mesma
Generalizao(Herana);
Agregao;
Associao.
Classificao:
Classificar
Instanciao:
Instanciar
Generalizao
Generalizar
Especializao
Especializar
Agregao
Agregar
Decomposio
Decompor
Raramente utilizado
Public
Protected
Private
Public
Public
Protected
No acess.
Private
Private
Private
No acess.
float ponto::retorna_y(void)
{ return y; }
void ponto::altera_x(float a)
{ x=a; }
void ponto::altera_y(float b)
{ y=b; }
void ponto::mostra(void)
{
cout << "(" << x << "," << y << ")" <<endl;
}
Resultado do programa:
P1(-3.14,-2.17)
P2(1.5,1.5)
void ponto::mostra(void){
cout << "(" << x << "," << y << ")" <<endl;
}
ponto_reflete::ponto_reflete(float a,float b):ponto(a,b)
{}
void ponto_reflete::reflete(void){
altera_x(-retorna_x());
altera_y(-retorna_y());
}
void ponto_reflete::mostra(void){
cout << "X:" << retorna_x() << " Y:";
cout << retorna_y() << endl;
}
//somente altera o formato de impressao
ponto_move::ponto_move(float a,float b):ponto(a,b)
{}
void ponto_move::move(float dx,float dy){
altera_x(retorna_x()+dx);
altera_y(retorna_y()+dy);
}
Resultado do programa:
P1X:-3.14 Y:-2.17
P2(1.5,1.5)
classe base;
Um ponteiro para um objeto de uma classe devida pode ser implicitamente
convertido para um ponteiro para um objeto da classe base;
A classe base especfica o que h de comum;
Relacionamento um herana;
Relacionamento tem um composio;
Ler declaraes de classes derivadas pode ser confuso! (os membros
herdados no aparecem na declarao)
Construtores de objetos membros so chamados na ordem de declarao
dos objetos. Na herana, os construtores da classe base so chamados na
ordem da especificao, antes do construtor das classe derivadas.
//implementation file
#include "funcover.h"
float abs(float a)
{
if (a>0.0) return a;
else return -a;
}
int abs(int a)
{
if (a>0) return a;
else return -a;
}
#include "funcover.h"
void main(){
int i1;
float f1;
cout << abs(int(-10))<<endl;
cout << abs(float(10.1))<<endl;
f1=-9.1;
i1=8.0;
cout << abs(f1) << endl;
cout << abs(i1) << endl;
}
#include "funcover.h"
float max(float a,float b){
if (a>b) return a;
else return b;
}
float max(float a,float b,float c){
if (a>b) return max(a,c);
else return max(b,c);
}
int max(int a,int b){
if (a>b) return a;
else return b;
}
#include <iostream.h>
#include "funcover.h"
void main()
{
cout << max(float(1.2),float(3.4),float(2.1))<<endl;
cout << max(float(1.5),float(.65)) << endl;
cout << max(int(12),int(120));
}
Vantagem?
Objetos
class relogio
{
friend class caixa_de_mensagem;
//permitiu acesso as definicoes private e public
private:
int hora;
int minuto;
int segundo;
//atributos private, encapsulados
public:
relogio(int h,int m,int s)
{hora=h; minuto=m; segundo=s;}
};
void main(){
relogio meurolex(11,30,10);
caixa_de_mensagem ativa;
ativa.imprime(meurolex);
}
Sada de char
char *string = teste;
cout << valor da string << string;
Manipulao de arquivos
Notao cientfica
Vnculo de E/S
#include <iostream>
using std::cout;
using std::endl;
#include <iomanip>
using std::ios;
#include <cmath>
int main(){
cout << "Before setting the ios::showpoint flag\n"
<< "9.9900 prints as: " << 9.9900
<< "\n9.9000 prints as: " << 9.9000
<< "\n9.0000 prints as: " << 9.0000
<< "\n\nAfter setting the ios::showpoint flag\n";
cout.setf( ios::showpoint );
cout << "9.9900 prints as: " << 9.9900
<< "\n9.9000 prints as: " << 9.9000
<< "\n9.0000 prints as: " << 9.0000 << endl;
return 0;
}
Programao C++
No se integra a definio da classe com
arquivos cabealhos, por dois motivos:
desempenho
de compilao:
Programao C++
segredo tecnolgico:
Programao em C++
Arquivos Cabealhos (header)
Programao em C++
Em uma aplicao que inclua dois mais dos cabealhos, um
erro de compilao seria gerado por estar definindo a classe
base mais de uma vez. A soluo para evitar este problema,
usar as diretivas de pr-processamento #define e #ifdef
juntamente com uma ``varivel de controle'': quando um
cabealho includo pela primeira vez, a varivel de
controle no estar definida; assim, o segmento do arquivo
de cabealho com a definio da classe includo e a
varivel de controle definida. Caso contrrio, a varivel de
controle j estar definida, e o restante do arquivo de
cabealho (a declarao da classe) pode ser ignorado.
Programao em C++
#ifndef VEHICLE_H
#define VEHICLE_H
class vehicle {
protected:
int wheels;
float weight;
public:
void initialize(int in_wheels, float in_weight);int get_wheels(void);
float get_weight(void);
float wheel_loading(void);
};
#endif
Programao em C++
Algumas recomendaes que, sendo
seguidas durante o desenvolvimento da
aplicao, podem auxiliar na minimizao
dos errose facilitar a manuteno de projetos
de software.
Programao em C++
1. Otimize cdigo apenas quando voc sabe que voc
tem um problema de desempenho. Pense duas vezes
antes de faz-lo.
2. Um arquivo de cabealho no deve conter mais do
que uma definio de classe.
3. Se h cdigo na sua aplicao que depende da
mquina onde a aplicao ser executada, coloque
este cdigo em um arquivo isolado, de forma que seja
fcil localiz-lo quando transferir sua aplicao para
outra mquina.
Programao em C++
4. Todo arquivo que contm cdigo fonte deve ser
documentado com comentrios introdutrios dando
informao sobre o nome do arquivo e seu contedo
5. Todos arquivos devem incluir informao de
copyright.
6. Escreva comentrios descritivos antes de cada funo.
7. Todo arquivo de cabealho deve conter o mecanismo
para evitar mltiplas incluses do mesmo arquivo.
Programao em C++
8. Escolha nomes de variveis que sugiram o seu uso.
9. Na definio de classes, ordene a declarao de
sees na ordem: pblica, protegida, privativa.
10. No define funes membro dentro da definio da
classe.
11. Sempre explicite o tipo de retorno de uma funo.
12. No especifique dados na seo pblica de uma
classe.
Programao em C++
13. Funes pequenas (por exemplo, simplesmente
retornar um valor de um membro da classe)
devem ser definidas como funo em linha.
14. Contrutores e destrutores no devem ser definidos
como funes em linha.
15. Uma funo membro que no afeta o estado de um
objeto deve ser declarada como const.
16. Use sobrecarga de operadores com parcimnia e
de maneira uniforme.
Programao em C++
17. Quando dois operadores tm usualmente
significados opostos (como == e !=),
apropriado definir ambos.
18. Evite funes com muitos argumentos.
19. Evite o uso de nmero varivel de argumentos.
20. Quando sobrecarregando funes, todas as
variaes devem ter a mesma semntica, isto ,
devem ser usadas para o mesmo fim.
Programao em C++
21. Uma funo pblica nunca deve retornar uma
referncia ou um apontador para uma varivel
local.
22. Evite funes longas e complexas.
23. No use a diretiva de processador #define para
definir macros; prefira a definio de funes em
linha.
24. Defina constantes usando const ou enum; nunca
use #define.
Programao em C++
25. Evite o uso de valores numricos no cdigo; d
preferncia ao uso de valores simblicos.
26. Variveis devem ser declaradas dentro do menor
escopo possvel.
27. Toda varivel que declarada deve receber um
valor antes de ser utilizada.
28. Evite o uso de apontadores para apontadores.
29. Evite o uso de converses explcitas de tipos
(casts).
Programao em C++
30. No escreva cdigo que dependa de funes que
usam converso implcita de tipos.
31. O cdigo aps um case deve sempre ser seguido
por um comando break.
32. Um comando switch deve sempre ter uma opo
default para manipular casos inesperados.
33. Nunca use goto.
34. Sempre use unsigned para uma varivel que se
espera que no v assumir valores negativos.
Programao em C++
35. Evite o uso de continue.
36. O uso de break para sair de laos deve ser
preferido ao uso de variveis de flag.
37. Use parnteses para deixar claro a ordem de
avaliao de operadores em expresses.
38. No use malloc, realloc ou free.
39. Sempre use colchetes vazios ([]) quando
removendo arranjos com delete.
Programao em C++
40. Evite usar dados globais.
41. No aloque memria esperando que outro algum ir
desaloc-la mais tarde.
42. Verifique os cdigos de falhas de funes de bibliotecas
por mais seguro que as chamadas possam parecer.
43. No assuma que um int tem 32 bits ou que tem o
mesmo tamanho de um long ou de um apontador.
44. No assuma que voc sabe como um certo tipo de dado
representado em memria.
Referncias
Object-Oriented Modeling and Design
James Rumbaugh, Michael Blaha, William
Premerlani, Frederick Eddy, William Lorensen
Prentice Hall International Editions, 1991.
The C ++ Programming Language, 2nd Edition
Bjarne Stroustrup
Addison Wesley, 1991.
C ++: the Complete Reference
Herbert Schildt
Osborne/McGraw-Hill, 1991.