Programação Avançada C++ Slide 10 Nielsen Castelo Damasceno
Função inline• O qualificador antes do tipo de retorno da
função na definição da função diz ao compilador para gerar uma cópia daquela função, para evitar uma chamada da função.
• Overhead durante a execução.• Desvantagem é que são geradas múltiplas cópias
da função no programa.• Sempre que puder use o inline para funções
pequenas.
Operador resolução de escopo• É possível declarar variáveis locais e globais com
o mesmo nome utilizando o operador unário (::).
Estruturas• Os tipos básicos (int, char, double e void) representam um
único item de informação. A partir dos tipos básicos, pode-se definir tipos complexos os quais permitirão agrupar um conjunto de variáveis de tipos iguais (vetores e matrizes) ou diferentes (estruturas, classes e uniões) 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 também podem conter funções que manipulam seus dados. Porém este enfoque será visto apenas no capítulo de “Classes”.
EstruturasNo exemplo anterior, foi criado uma estrutura para representar um produto e na sequência foram instanciadas duas variáveis do tipo produto de nome “caneta” e “lápis”.
Estruturas• Quando se declara uma estrutura, nenhuma área de
memória é reservada. Simplesmente estamos informando ao compilador a criação de um novo tipo de dados.
• Uma estrutura é um tipo definido pelo programador, portanto a definição de uma variável desse novo tipo é semelhante à definição de variáveis dos tipos básicos:
produto caneta; aluno aluno01; agencia Ag; Conta cValor; Conta cMatriz[10];
Acesso aos membros da estruturas• Para ter acesso à variável membro de um estrutura utiliza-
se o operador ponto ( . ) que fará a conexão da variável estrutura a um membro dela.
Inicialização e atribuição de estruturas • O processo de inicialização de uma variável estrutura é
semelhante à inicialização de uma matriz. Ex.: produto caneta = { 2, 1.2 };
• Se duas variáveis forem do mesmo tipo de estrutura, a atribuição pode ser feita de maneira tradicional.
Array de estruturas• A declaração de um array de estruturas ocorre da mesma
forma que uma variável estrutura.
• Inicialização de array de estruturas na declaração:
Array de estruturas• O acesso aos elementos de um array de estruturas é feito
no formato:
• Exemplo:
Exercício• Crie uma função que passa como parâmetro um
ponteiro para um variável qualquer .• A função main deve chamar essa função e alterar
a variável utilizando o ponteiro.• Utilize o operador new e delete.
Exercício• Crie um array de estrutura chamado ALUNO que
contem os seguintes elementos: código, nome, dia matricula, mês matricula, ano matricula, nome do curso.
• O sistema deve ser capaz de cadastrar os alunos e apresentar a lista de arrays desta estrutura através de uma função.
• Utilize ponteiros e funções
Programação Orientado a Objeto• Aproveitamento do código, POO não é nova, sua
formulação inicial foi em 1960. Porém, somente a partir dos anos 90 é que passou a ser usada.
• Função e dados estão junto, formando o objeto.• A Análise Orientada a Objeto (AOO) tem uma
série de conceitos que auxiliam as pessoas a delinear claramente o problema e a identificar os objetos e seus relacionamentos.
Abstração• Significa concentrar-se no que um objeto é e faz
antes de se decidir como ele será implementado.• Compreender um sistema, concreto ou não, e
criar um modelo documentado e padronizado que reflita seu comportamento.
• “Processo de modelagem de sistema concreto ou não, extraindo do seu contexto os principais objetos e descrevendo-os por meio da discriminação de suas propriedades e funcionalidades.
Abstração• Os objetos do sistema, são conceituais e suas
características dividem-se em duas categorias:
Propriedades (atributos): descrevem o objeto, seus possíveis estados e o papel que ele desempenha no sistema.Funcionalidades (métodos): descrevem a ação 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 abstração
Atributos: Tamanho, cor, código, tecido, etc.
Funcionalidades: Proteger, esconder, padroniza
Processo de abstração
Atributos: saldos, limite, juros, vencimento.
Funcionalidades: débito, crédito, consulta saldo.
Modelo OMT• Object Modeling Technique, proposto por
Rumbaugh.• Introduz uma representação diagramática para este
modelo.• OMT define dois tipos de diagramas de objetos:
diagrama de classe e de instâncias.• Um diagrama de classe é um esquema que descreve
as muitas possíveis instâncias de dados.• Um diagrama de instância descreve como um
conjunto particular de objetos está relacionado.
Ligações e associações• Mecanismo para estabelecer relacionamentos
entre objetos e classes.• Uma associação é representada como uma linha
conectando dois objetos.• Nome de associações são usualmente
representado em itálico
Agregação• Uma agregação é um relacionamento do tipo “uma parte
de”, nos quais objetos representando os componentes de alguma coisa são associados com objetos representando uma montante.
• Agregação transitiva: se A é parte de B e B é parte de C, então A é parte de C.
• Anti-simétrica: se A é parte de B, então B não é parte de A.
Generalização e Herança• Generalização: é o relacionamento entre uma
classe e um ou mais versões refinadas desta classe.• A classe refinada é chamada de super classe ou
classe base.• A tributos e operações comuns a um grupo de
classes derivadas são colocadas como atributos e operações da classe base, sendo compartilhados por cada classe derivada.
• A classe derivada herda as características de sua classe base.
Compilar, linkar, debugar e profiler• Um programa: Composto por um ou mais arquivos
encadeados. Um arquivo é composto por um conjunto de instruções em programa.
• Pré-processamento: É a primeira fase da compilação, verifica as instruções de compilação passadas como o sinal #; Primeiro são incluídos os arquivos externos, depois são processadas as macros. O resultado é uma sequencia de símbolos que chamamos de unidade de tradução.
• Compilador: encontra os erros de sintaxe do programa e realiza a tradução do código em linguagem de máquina. 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 executável. Os arquivos que serão unidos são definidos em um arquivo de projeto ou em um arquivo makefile. Depois de linkados tem um arquivo executável *.exe no Windows, a.out no Linux.
• Debuber: é um programa que ajuda o programador a encontrar os erros de programação.
• Profiler: programa que ajuda a identificar os pontos do programa que consomem mais tempo (onde o programa esta sendo lento).
Extensões usuais dos arquivos
Situação Windows Unix/Linux MacAntes de compilar nome.h/nome.cpp nome.h/nome.cpp nome.h/nome.cpp
Depois de compilar nome.obj nome.o nome.o
Depois de linkar nome.exe nome Nome
Layout de um programa• Arquivo de cabeçalho (*.h)• Arquivo de implementação (*.cpp)
Diferença nas nomenclaturas da POO e de C++
Nomenclaturas POO Nomenclaturas C++Objeto ObjetoClasse Classe
Método Função/MétodoAtributo Atributo, variável
Mensagem Chamada de funçãoSubclasse Classe derivada
Superclasse Classe baseHereditariedade Derivação
Classe• Modela objetos que tem atributos• E comportamentos ou operações que são
funções.• Utiliza class para construir uma fábrica de
objetos.
Exercício• Crie uma função em uma classe que calcule o
produto matricial. O usuário deve entrar com o tamanho da matriz e os elementos da matriz.
• E crie uma possibilidade dos elementos da matriz serem geradas aleatoriamente entre 1 e 10.
• Entre com uma matriz no mínimo 900x900 (problema). Resolva o problema de inicialização da matriz com ponteiro para ponteiro.
Atividade• Modifique o código a seguir que foi escrito
utilizando struct para uma codificação utilizando classes.
• Otimize o código-fonte.• Utilize ponteiros na criação dos objetos.
Atributos de classe (estáticos)• Existem dois tipos de atributos dentro de uma
classe:Atributos de objetosAtributos da classe
• Atributos da classe: coletivos, é armazenado dentro da classe.
• O objetivo é possibilitar o compartilhamento do mesmo por todos os objetos criados.
Atributos com mutable• Se uma classe tem um método membro const o
mesmo não pode alterara os atributos da classe.• Uma forma de contornar isto é definir o atributo
como mutable (poder mudar).
Construtores e destrutores• Funções que inicializam uma classe.• Tem o mesmo nome da classe.• Destrutores realizam a operação inversa.• São invocadas quando um objeto está para
morre.• Destrutor tem o mesmo nome da classe porém
com um til (~) como prefixo.
Construtores e destrutores• Quando você cria um objeto a sequencia da
construção do objeto é dada por:Solicitação de memória para o SO.Criação dos atributos do objeto.Execução do construtor da classe.
• Se for criada uma matriz de objetos a sequência da criação é obj[0], obj[1], ..., obj[n].
• A sequencia da destruição é obj[n], obj[n-1], ..., obj[0].
Inicialização dos atributos da classe nos construtores• Observe que ao inicializar o atributo no
construtor o mesmo é inicializado como uma cópia do valor passado, o que é mais rápido do que atribuir um valor ao atributo dentro do construtor.