Você está na página 1de 73

Programao Avanada C++

Slide 2 Nielsen Castelo Damasceno

Funo inline
O qualificador antes do tipo de retorno da funo na definio da funo diz ao compilador para gerar uma cpia daquela funo , para evitar uma chamada da funo. Overhead durante a execuo. Desvantagem que so geradas mltiplas cpias da funo no programa. Sempre que puder use o inline para funes pequenas.

Funo inline

Chamadas por valor e referncia

Operador resoluo de escopo


possvel declarar variveis locais e globais com o mesmo nome utilizando o operador unrio (::).

Sobrecarga de funes

Alocando memria
typeName * pointer_name = new typeName; int * pn = new int;

Alocando memria

Liberando memria

Operador new e delete


O operador new utilizado para alocar um bloco de memria. Primeiro o operador new solicita ao SO um bloco de memria, aps alocar o bloco de memria, new retorna um ponteiro para o bloco alocado. Se new falhar, retorna um bad_aloc.

Operador new e delete


Para destruir o objeto e devolver a memria para o SO utiliza-se o operador delete. Delete destri o objeto e devolve o bloco de memria para o SO. Observe que apenas o bloco de memria destrudo. O ponteiro continua existindo, e continua apontando para o bloco de memria que agora no existe mais. Depois de usar delete, o ponteiro aponta para um monte de lixo e no deve mais ser utilizado.

Operador new e delete

Arranjos e apontadores
Retangulo box[5]; box[2].area(); Retangulo *p; p = □ p -> area();

Alocando Objetos
Retangulo *p; p = new Retangulo [6]; ... delete [] p;

Estruturas
Os tipos bsicos (int, char, double e void) representam um nico item de informao. A partir dos tipos bsicos, podese definir tipos complexos os quais permitiro agrupar um conjunto de variveis de tipos iguais (vetores e matrizes) ou diferentes (estruturas, classes e unies) sob um nico nome. Uma estrutura um agrupamento de elementos de dados sob um mesmo nome. Estes elementos de dados, denominados membros, podem ter diferentes tipos e diferentes tamanhos. Estruturas tambm podem conter funes que manipulam seus dados. Porm este enfoque ser visto apenas no captulo de Classes.

Estruturas

Estruturas
No exemplo anterior, foi criado uma estrutura para representar um produto e na sequncia foram instanciadas duas variveis do tipo produto de nome caneta e lpis.

Estruturas
Quando se declara uma estrutura, nenhuma rea de memria reservada. Simplesmente estamos informando ao compilador a criao de um novo tipo de dados. Uma estrutura um tipo definido pelo programador, portanto a definio de uma varivel desse novo tipo semelhante definio de variveis dos tipos bsicos: produto caneta; aluno aluno01; agencia Ag; Conta cValor; Conta cMatriz[10];

Acesso aos membros da estruturas


Para ter acesso varivel membro de um estrutura utilizase o operador ponto ( . ) que far a conexo da varivel estrutura a um membro dela.

Estruturas

Estruturas

Estruturas

Inicializao e atribuio de estruturas


O processo de inicializao de uma varivel estrutura semelhante inicializao de uma matriz. Ex.: produto caneta = { 2, 1.2 }; Se duas variveis forem do mesmo tipo de estrutura, a atribuio pode ser feita de maneira tradicional.

Array de estruturas
A declarao de um array de estruturas ocorre da mesma forma que uma varivel estrutura.

Inicializao de array de estruturas na declarao:

Array de estruturas
O acesso aos elementos de um array de estruturas feito no formato:

Exemplo:

Exerccio
Crie um array de estrutura chamado ALUNO que contem os seguintes elementos: cdigo, nome, dia matricula, ms matricula, ano matricula, nome do curso. O sistema deve ser capaz de cadastrar os alunos e apresentar a lista de arrays desta estrutura atravs de uma funo.

Programao Orientado a Objeto


Aproveitamento do cdigo, POO no nova, sua formulao inicial foi em 1960. Porm, somente a partir dos anos 90 que passou a ser usada. Funo e dados esto junto, formando o objeto. A Anlise Orientada a Objeto (AOO) tem uma srie de conceitos que auxiliam as pessoas a delinear claramente o problema e a identificar os objetos e seus relacionamentos.

Abstrao
Significa concentrar-se no que um objeto e faz antes de se decidir como ele ser implementado. Compreender um sistema, concreto ou no, e criar um modelo documentado e padronizado que reflita seu comportamento. Processo de modelagem de sistema concreto ou no, extraindo do seu contexto os principais objetos e descrevendo-os por meio da discriminao de suas propriedades e funcionalidades.

Abstrao
Os objetos do sistema, so conceituais e suas caractersticas dividem-se em duas categorias:
Propriedades (atributos): descrevem o objeto, seus possveis estados e o papel que ele desempenha no sistema. Funcionalidades (mtodos): descrevem a ao do objeto e representam o seu comportamento dentro do sistema. Estamos criando uma classe representando um determinado objeto. Usamos as classes para definir tipos de objetos (conjunto de objetos com propriedades e funcionalidades).

Processo de abstrao

Atributos: Tamanho, cor, cdigo, tecido, etc. Funcionalidades: Proteger, esconder, padroniza

Processo de abstrao
Atributos: saldos, limite, juros, vencimento. Funcionalidades: dbito, crdito, consulta saldo.

Modelo OMT
Object Modeling Technique, proposto por Rumbaugh. Introduz uma representao diagramtica para este modelo. OMT define dois tipos de diagramas de objetos: diagrama de classe e de instncias. Um diagrama de classe um esquema que descreve as muitas possveis instncias de dados. Um diagrama de instncia descreve como um conjunto particular de objetos est relacionado.

Modelo OMT

Ligaes e associaes
Mecanismo para estabelecer relacionamentos entre objetos e classes. Uma associao representada como uma linha conectando dois objetos. Nome de associaes so usualmente representado em itlico

Ligaes e associaes
Alguns atributos podem dizer respeito a associaes, e no a classe.

Agregao
Uma agregao um relacionamento do tipo uma parte de, nos quais objetos representando os componentes de alguma coisa so associados com objetos representando uma montante.

Agregao transitiva: se A parte de B e B parte de C, ento A parte de C. Anti-simtrica: se A parte de B, ento B no parte de A.

Generalizao e Herana
Generalizao: o relacionamento entre uma classe e um ou mais verses refinadas desta classe. A classe refinada chamada de super classe ou classe base. A tributos e operaes comuns a um grupo de classes derivadas so colocadas como atributos e operaes da classe base, sendo compartilhados por cada classe derivada. A classe derivada herda as caractersticas de sua classe base.

Generalizao e Herana

Compilar, linkar, debugar e profiler


Um programa: Composto por um ou mais arquivos encadeados. Um arquivo composto por um conjunto de instrues em programa. Pr-processamento: a primeira fase da compilao, verifica as instrues de compilao passadas como o sinal #; Primeiro so includos os arquivos externos, depois so processadas as macros. O resultado uma sequencia de smbolos que chamamos de unidade de traduo. Compilador: encontra os erros de sintaxe do programa e realiza a traduo do cdigo em linguagem de mquina. Depois de compilado o programa passa a tar um arquivo *.obj ou *.o no Unix/Linux.

Compilar, linkar, debugar e profiler


Linker: Transforma um ou mais arquivo *.obj (*.o) em um arquivo executvel. Os arquivos que sero unidos so definidos em um arquivo de projeto ou em um arquivo makefile. Depois de linkados tem um arquivo executvel *.exe no Windows, a.out no Linux. Debuber: um programa que ajuda o programador a encontrar os erros de programao. Profiler: programa que ajuda a identificar os pontos do programa que consomem mais tempo (onde o programa esta sendo lento).

Extenses usuais dos arquivos


Situao
Antes de compilar Depois de compilar Depois de linkar

Windows
nome.h/nome.cpp nome.obj nome.exe

Unix/Linux Mac
nome.h/nome.cpp nome.o nome nome.h/nome.cpp nome.o Nome

Layout de um programa Arquivo de cabealho (*.h) Arquivo de implementao (*.cpp)

Diferena nas nomenclaturas da POO e de C++


Nomenclaturas POO Nomenclaturas C++ Objeto Objeto Classe Classe Mtodo Funo/Mtodo Atributo Atributo, varivel Mensagem Chamada de funo Subclasse Classe derivada Superclasse Classe base Hereditariedade Derivao

Classe
Modela objetos que tem atributos E comportamentos ou operaes que so funes. Utiliza class para construir uma fbrica de objetos.

Classe

Primeiro programa orientado a objeto

Primeiro programa orientado a objeto

Primeiro programa orientado a objeto

Workspace code::Blocks 12.11

Outras classes

Outras classes

Atributos de objeto

Atributos de objeto

Classe e funes membro

Classe e funes membro

Atributos de classe (estticos)


Existem dois tipos de atributos dentro de uma classe:
Atributos de objetos Atributos da classe

Atributos da classe: coletivos, armazenado dentro da classe. O objetivo possibilitar o compartilhamento do mesmo por todos os objetos criados.

Atributos de classe (estticos)

Exemplo classe hora

Classe

Classes e estrutura

Classes e estrutura

Atributos const

Atributos const

Atributos com mutable


Se uma classe tem um mtodo membro const o mesmo no pode alterara os atributos da classe. Uma forma de contornar isto definir o atributo como mutable (poder mudar).

Construtores e destrutores
Funes que inicializam uma classe. Tem o mesmo nome da classe. Destrutores realizam a operao inversa. So invocadas quando um objeto est para morre. Destrutor tem o mesmo nome da classe porm com um til (~) como prefixo.

Construtores e destrutores
Quando voc cria um objeto a sequencia da construo do objeto dada por:
Solicitao de memria para o SO. Criao dos atributos do objeto. Execuo do construtor da classe.

Se for criada uma matriz de objetos a sequncia da criao obj[0], obj[1], ..., obj[n]. A sequencia da destruio obj[n], obj[n-1], ..., obj[0].

Inicializao dos atributos da classe nos construtores


Prottipo:

Inicializao dos atributos da classe nos construtores


Observe que ao inicializar o atributo no construtor o mesmo inicializado como uma cpia do valor passado, o que mais rpido do que atribuir um valor ao atributo dentro do construtor.

Classe (parmetros: cpia, referncia e ponteiro)

Classe (parmetros: cpia, referncia e ponteiro)

Classe (parmetros: cpia, referncia e ponteiro)

Classe (parmetros: cpia, referncia e ponteiro)

Classe (parmetros: cpia, referncia e ponteiro)