programação avançada c++ - ncdd.com.br+/slide10.pdf · estruturas • os tipos básicos (int,...

75
Programação Avançada C++ Slide 10 Nielsen Castelo Damasceno

Upload: trankhanh

Post on 20-Jan-2019

217 views

Category:

Documents


0 download

TRANSCRIPT

Programação Avançada C++Slide 10Nielsen 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.

Função inline

Operador resolução de escopo• É possível declarar variáveis locais e globais com

o mesmo nome utilizando o operador unário (::).

Sobrecarga de funções

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”.

Estruturas

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.

Estruturas

Estruturas

Estruturas

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:

Arrays com Enum

Ponteiro para ponteiro

Ponteiro para ponteiro

struct para ponteiro

struct com ponteiro

struct com ponteiro

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.

Overflow

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.

Modelo OMT

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

Ligações e associações• Alguns atributos podem dizer respeito a

associações, e não a classe.

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.

Generalização e Herança

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.

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 funções membro

Classe e funções membro

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.

(4, 11)

(2, 7)(6, 5)

(2, 0)

((8, 3)

(10, 9)

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 de classe (estáticos)

Exemplo classe hora

Classe

Classes e estrutura

Classes e estrutura

Atributos const

Atributos const

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• Protótipo:

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.

Classe (parâmetros: cópia, referência e ponteiro)

Classe (parâmetros: cópia, referência e ponteiro)

Classe (parâmetros: cópia, referência e ponteiro)

Classe (parâmetros: cópia, referência e ponteiro)

Classe (parâmetros: cópia, referência e ponteiro)