Aula 02 - Classes em C++ ( Parte 1 )

24
Introdu¸ ao O que s˜ ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ ao Palestra: Classes em C++ Lucas Santana Lellis [email protected] PESL - Programa de Educa¸ ao em Software livre Universidade Federal de S˜ ao Paulo 27 de Setembro de 2013 Lucas Lellis Classes em C++

description

Nesta aula introduzimos o conceito de Classe e Objeto, e aprendemos técnicas básicas de implementação de Classes em C++

Transcript of Aula 02 - Classes em C++ ( Parte 1 )

Page 1: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

Palestra: Classes em C++

Lucas Santana [email protected]

PESL - Programa de Educacao em Software livreUniversidade Federal de Sao Paulo

27 de Setembro de 2013

Lucas Lellis Classes em C++

Page 2: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

1 Introducao

2 O que sao Objetos e Classes?ObjetosClasses

3 Construtores e DestrutoresConstrutoresDestrutores

4 EncapsulamentoEspecificadores de acessoImplementacao das funcoes ”get”Implementacao das funcoes ”set”

5 ConclusaoO que vem pela frente?

Lucas Lellis Classes em C++

Page 3: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

Introducao

Nessa palestras vamos apresentar um dos recursos maisimportantes do C++: As CLASSES. Vamos introduzir oconceito de classes e apresentar tecnicas de implementacao eutilizacao.

Tudo o que pode ser visto como um tipo de dado, ou umaclasse de objetos ou conceitos, pode ser representado comouma classe.

O codigo pode ficar muito mais limpo, e muito mais intuitivo.

Somado com alguns recursos auxiliares, podemos criar tiposde dados extremamente versateis, sendo possıvel programarseus operadores, e/ou tambem, criar classes ”Template” (Classes que recebem um tipo de dados como parametro ).

Lucas Lellis Classes em C++

Page 4: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

ObjetosClasses

O que sao Objetos e Classes?

Antes de definir o que e uma ”classe” em C++, temos que definiro que sao ”Objetos” e ”Classes” no mundo real. Sem os ”objetos”nao terıamos ”classes de objetos”...Vamos tomar emprestado da aula introdutoria, a definicao quecriamos para ”Classes” e para ”Objetos”.

Lucas Lellis Classes em C++

Page 5: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

ObjetosClasses

Objetos

O Mundo Real e formado por objetos que interagem entre si (casa,carro, aluno, professor, etc)

O que e um objeto?

Qualquer coisa, real ou abstrata, com limites e significados bemdefinidos para a aplicacao. Possuem um estado (valores deatributos) e oferecem operacoes (comportamentos) para examinarou alterar este estado.

Lucas Lellis Classes em C++

Page 6: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

ObjetosClasses

Podemos representar um objeto como uma entidade individual, quepossui seus atributos e suas funcoes.Em C++, os atributos seriam as variaveis que guardam suasinformacoes. E as funcoes, ou ( metodos ), sao funcoes usadaspara interagir com esse objeto, como uma funcao usada paramudar algum atributo, por exemplo.

Pera aı!

So um detalhe, nos nao programamos objetos diretamente!!Temos que criar uma CLASSE de objetos antes.

Lucas Lellis Classes em C++

Page 7: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

ObjetosClasses

Classes

O que e uma classe?

E uma forma de CLASSIFICAR um tipo de objetos.. Ou seja,quando dois objetos possuem o mesmo tipo de atributos e asmesmas funcoes, eles pertencem a uma mesma classe.Assim que criamos uma classe, podemos INSTANCIAR um objeto,com seus respectivos atributos, que sao individuais para cadaobjeto.

Lucas Lellis Classes em C++

Page 8: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

ObjetosClasses

Struct: O grande ancestral

Ao cursar a materia de ”Algoritmos e Estrutura de Dados”, usandoa linguagem C, nos costumavamos criar tipos de dados a partir deSTRUCTS. Aquilo que fizemos em AED e muito parecido comuma classe. Porem, a orientacao a objetos, em especial o C++,trazem recursos que vao muito alem do que se pode fazer com umstruct. E melhor! Da pra fazer muita coisa sem usar alocacaodinamica e ponteiros. Alem da seguranca oferecida pela tecnica deEncapsulamento, e a reutilizacao de codigo que so e possıvel porcausa dos conceitos de orientacao a objetos, como heranca,polimorfismo, e tambem pela programacao generica (Templates).

Lucas Lellis Classes em C++

Page 9: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

ObjetosClasses

Classes em C++

Declarando uma classe.

class nome_da_classe {

public:

//Atributos

int X, Y;

//Metodos

int funcao ( int val ) {

return ( X*val + Y );

}

};

Podemos decidir ”o que” e ”como” as outras classes interagemcom a nossa classe. Por meio do ”encapsulamento”, que seramelhor trabalhado nas proximas palestras.

Lucas Lellis Classes em C++

Page 10: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

ConstrutoresDestrutores

Construtores e Destrutores

Como muitos sabem, as classes em C++, em situacoes normais,nao precisam da ajuda do programador para fazer a alocacaodinamica de memoria. Alem disso ela tem um coletor de lixo. Ouseja, normalmente nao precisamos alocar e liberar memoriamanualmente, muita coisa ja e implementada durante acompilacao do programa.

Lucas Lellis Classes em C++

Page 11: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

ConstrutoresDestrutores

Construtores

Construtores sao as funcoes responsaveis por inicializar asvariaveis dentro de um objeto. Voce chama um construtordurante a instanciacao de um objeto.

Se voce nao criar um construtor, os construtoresimplementados automaticamente pelo compilador vao criarobjetos vazios, e entao, voce precisaria inicializar cada variaveldesse objeto separadamente.

Com um construtor voce poupa varias linhas de codigo ;).

Lucas Lellis Classes em C++

Page 12: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

ConstrutoresDestrutores

Implementando um construtor

class Circulo {

public:

int pos_X, pos_Y;

int raio;

Circulo ( int X, int Y, int r ) { //Construtor

pos_X = X;

pos_Y = Y;

raio = r;

}

};

int main () { //Instanciando um objeto usando o Construtor

Circulo c1 ( 10, 10, 5 );

}

Lucas Lellis Classes em C++

Page 13: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

ConstrutoresDestrutores

Destrutores

Sabe-se que o C++ ja faz coleta automatica das variaveis edos objetos que deixamos para tras.

Os Destrutores servem para liberar os dados que foramalocados dinamicamente ( usando new ).

Para liberar a memoria alocada pela funcao new, usamos afuncao delete.

Lucas Lellis Classes em C++

Page 14: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

ConstrutoresDestrutores

Construtor com alocacao dinamica de matriz

class Matriz {

public:

unsigned int lin, col;

int ** mat; //Ponteiro == Vai precisar de al. dinamica

Matriz ( unsigned int l, unsigned int c ) {

lin = l; col = c;

mat = new int* [l];

for ( unsigned int i = 0; i < l; i++ )

mat[i] = new int[col];

}

// ...

};

Lucas Lellis Classes em C++

Page 15: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

ConstrutoresDestrutores

Destrutor

class Matriz {

// ...

/* So precisamos deletar as variaveis alocadas atraves

da funcao new */

virtual ~Matriz() {

for (int i=0; i<col; i++ )

delete mat[i];

delete mat;

}

// ...

};

Lucas Lellis Classes em C++

Page 16: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

Especificadores de acessoImplementacao das funcoes ”get”Implementacao das funcoes ”set”

Encapsulamento

Muitas vezes nao queremos que as outras classes tenhamacesso direto a variaveis e funcoes especıficas dos objetos deuma classe especıfica. A tecnica responsavel pelo controle deacesso aos elementos de uma classe e o ”encapsulamento”.

Nos podemos controlar esse acesso usando os chamados”especificadores de acesso”.

Os especificadores de acesso sao conhecidos pelosidentificadores ”public”, ”private” e ”protected”.

Lucas Lellis Classes em C++

Page 17: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

Especificadores de acessoImplementacao das funcoes ”get”Implementacao das funcoes ”set”

Esses especificadores modificam os direitos de acesso que asclasses e funcoes externas tem sobre os elementos de uma classe.

Os membros privados ( private ) sao acessıveis apenas pelosmembros da propria classe, ou pelas classes ”amigas”.

Os membros protegidos ( protected ), alem dos direitos dadospelos membros privados, tambem estendem esse acesso asclasses derivadas ( Herdeiras ).Quando nao colocamos nenhum especificador, os membrosserao, obrigatoriamente, do tipo ”protected”.Quando nao ha heranca, nao ha a necessidade de diferenciar”private” de ”protected”.

Os membros publicos ( public ) sao acessıveis atraves dequalquer classe ou funcao que interage com os objetos dessaclasse.

Lucas Lellis Classes em C++

Page 18: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

Especificadores de acessoImplementacao das funcoes ”get”Implementacao das funcoes ”set”

Exemplo de utilizacao do encapsulamento

class ContaBancaria {

/* Aqui, para proteger o acesso as variaveis agencia,

conta e saldo. Podemos deixar sem especificador, ou

colocar os especificadores ’’protected’’ ou

’’private’’. */

int agencia;

int conta;

float saldo;

public: //O construtor eh uma funcao publica...

ContaBancaria ( int ag, int cnt ) {

agencia = ag;

conta = cnt;

saldo = 0.0;

}

}

Lucas Lellis Classes em C++

Page 19: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

Especificadores de acessoImplementacao das funcoes ”get”Implementacao das funcoes ”set”

Se, a partir da main, tentarmos acessar alguma das variaveisprotegidas da classe ”ContaBancaria”, o compilador ira exibir umamensagem de erro;

Tentativa de acesso das variaveis protegidas

int main () {

Contabancaria teste ( 1234, 99999 );

cout << teste.agencia; // Impossivel!

}

Mas podemos criar funcoes de acesso limitado aos dados:

int getX() : Retornam o valor da variavel X.

void setX( int val ) : Modificam o valor da variavel X.

Lucas Lellis Classes em C++

Page 20: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

Especificadores de acessoImplementacao das funcoes ”get”Implementacao das funcoes ”set”

Podemos exemplificar o uso dos gets estendendo o exercıcioanterior.

Usando ”gets”

class ContaBancaria {

int agencia, conta;

float saldo; // ...

*/ Essas funcoes abaixo sao publicas e permitem apenas

obter o valor das variaveis, mas sem possibilidade de

edicao */

public:

int getAgencia () { return agencia };

int getConta () { return conta } ;

float getSaldo() { return saldo };

}

Lucas Lellis Classes em C++

Page 21: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

Especificadores de acessoImplementacao das funcoes ”get”Implementacao das funcoes ”set”

Vamos exemplificar agora o uso dos sets.

Usando ”sets”

class ContaBancaria {

int agencia, conta;

float saldo; // ...

*/ Agora, somente o saldo pode ser alterado. */

public:

void setSaldo ( float novo_saldo ) { saldo =

novo_saldo; }

}

Lucas Lellis Classes em C++

Page 22: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

Especificadores de acessoImplementacao das funcoes ”get”Implementacao das funcoes ”set”

Agora esta tudo certo, ne? .. Bom, na verdade nao, pois naopodemos permitir que o saldo seja alterado diretamente, que talimplementar funcoes de saque e deposito?

Funcoes de saque e deposito

class ContaBancaria {

void saque ( float valor ) {

if ( saldo >= valor )

saldo -= valor;

}

void deposito ( float valor ){

saldo += valor;

}

}

Lucas Lellis Classes em C++

Page 23: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

Especificadores de acessoImplementacao das funcoes ”get”Implementacao das funcoes ”set”

Para finalizar, vamos mostrar como utilizar essas funcoes noprograma.

Usando as funcao no nosso programa

int main () {

Contabancaria teste ( 1234, 99999 );

cout << "AG: " << teste.getAgencia() << " ,CNT: "

<< teste.getConta() << endl;

teste.deposito( 100.0 );

teste.saque ( 50.0 );

cout << "SALDO: " << teste.getSaldo();

/* A saida sera:

AG: 1234, CNT: 99999

SALDO: 50.0

*/

}

Lucas Lellis Classes em C++

Page 24: Aula 02 - Classes em C++ ( Parte 1 )

IntroducaoO que sao Objetos e Classes?

Construtores e DestrutoresEncapsulamento

Conclusao

O que vem pela frente?

O que vem pela frente?

Teremos palestras todas as sextas-feiras, abordando cada veznovos conceitos sobre C++. A proxima sera ”Classes - Parte 2”,onde aprofundaremos nossos conhecimentos sobre as classes emC++.Lembrando que todas as apresentacoes desse ciclo depalestras serao colocadas no moodle do PESL!

Nossos canais de comunicacao

1 MOODLE do PESL - Curso de C++ :http://pinguim.pro.br/moodle/course/view.php?id=6

2 Portal do Programa de Educacao em Software Livrehttp://pinguim.pro.br/

3 Facebook: https://www.facebook.com/PESL.PInguim

4 Youtube: http://www.youtube.com/user/pinguimvideos/

Lucas Lellis Classes em C++