SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Palestra: Classes em C++
Lucas Santana Lellis
lellis@unifesp.br
PESL - Programa de Educa¸c˜ao em Software livre
Universidade Federal de S˜ao Paulo
27 de Setembro de 2013
Lucas Lellis Classes em C++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
1 Introdu¸c˜ao
2 O que s˜ao Objetos e Classes?
Objetos
Classes
3 Construtores e Destrutores
Construtores
Destrutores
4 Encapsulamento
Especificadores de acesso
Implementa¸c˜ao das fun¸c˜oes ”get”
Implementa¸c˜ao das fun¸c˜oes ”set”
5 Conclus˜ao
O que vem pela frente?
Lucas Lellis Classes em C++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Introdu¸c˜ao
Nessa palestras vamos apresentar um dos recursos mais
importantes do C++: As CLASSES. Vamos introduzir o
conceito de classes e apresentar t´ecnicas de implementa¸c˜ao e
utiliza¸c˜ao.
Tudo o que pode ser visto como um tipo de dado, ou uma
classe de objetos ou conceitos, pode ser representado como
uma classe.
O c´odigo pode ficar muito mais limpo, e muito mais intuitivo.
Somado com alguns recursos auxiliares, podemos criar tipos
de dados extremamente vers´ateis, sendo poss´ıvel programar
seus operadores, e/ou tamb´em, criar classes ”Template” (
Classes que recebem um tipo de dados como parˆametro ).
Lucas Lellis Classes em C++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Objetos
Classes
O que s˜ao Objetos e Classes?
Antes de definir o que ´e uma ”classe” em C++, temos que definir
o que s˜ao ”Objetos” e ”Classes” no mundo real. Sem os ”objetos”
n˜ao ter´ıamos ”classes de objetos”...
Vamos tomar emprestado da aula introdut´oria, a defini¸c˜ao que
criamos para ”Classes” e para ”Objetos”.
Lucas Lellis Classes em C++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Objetos
Classes
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 bem
definidos para a aplica¸c˜ao. Possuem um estado (valores de
atributos) e oferecem opera¸c˜oes (comportamentos) para examinar
ou alterar este estado.
Lucas Lellis Classes em C++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Objetos
Classes
Podemos representar um objeto como uma entidade individual, que
possui seus atributos e suas fun¸c˜oes.
Em C++, os atributos seriam as vari´aveis que guardam suas
informa¸c˜oes. E as fun¸c˜oes, ou ( m´etodos ), s˜ao fun¸c˜oes usadas
para interagir com esse objeto, como uma fun¸c˜ao usada para
mudar algum atributo, por exemplo.
Pera a´ı!
S´o um detalhe, n´os n˜ao programamos objetos diretamente!!
Temos que criar uma CLASSE de objetos antes.
Lucas Lellis Classes em C++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Objetos
Classes
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 as
mesmas fun¸c˜oes, eles pertencem a uma mesma classe.
Assim que criamos uma classe, podemos INSTANCIAR um objeto,
com seus respectivos atributos, que s˜ao individuais para cada
objeto.
Lucas Lellis Classes em C++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Objetos
Classes
Struct: O grande ancestral
Ao cursar a mat´eria de ”Algoritmos e Estrutura de Dados”, usando
a linguagem C, n´os costum´avamos criar tipos de dados a partir de
STRUCTS. Aquilo que fizemos em AED ´e muito parecido com
uma classe. Por´em, a orienta¸c˜ao a objetos, em especial o C++,
trazem recursos que v˜ao muito al´em do que se pode fazer com um
struct. E melhor! D´a pra fazer muita coisa sem usar aloca¸c˜ao
dinˆamica e ponteiros. Al´em da seguran¸ca oferecida pela t´ecnica de
Encapsulamento, e a reutiliza¸c˜ao de c´odigo que s´o ´e poss´ıvel por
causa dos conceitos de orienta¸c˜ao a objetos, como heran¸ca,
polimorfismo, e tamb´em pela programa¸c˜ao gen´erica (Templates).
Lucas Lellis Classes em C++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Objetos
Classes
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 quˆe” e ”como” as outras classes interagem
com a nossa classe. Por meio do ”encapsulamento”, que ser´a
melhor trabalhado nas pr´oximas palestras.
Lucas Lellis Classes em C++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Construtores
Destrutores
Construtores e Destrutores
Como muitos sabem, as classes em C++, em situa¸c˜oes normais,
n˜ao precisam da ajuda do programador para fazer a aloca¸c˜ao
dinˆamica de mem´oria. Al´em disso ela tem um coletor de lixo. Ou
seja, normalmente n˜ao precisamos alocar e liberar mem´oria
manualmente, muita coisa j´a ´e implementada durante a
compila¸c˜ao do programa.
Lucas Lellis Classes em C++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Construtores
Destrutores
Construtores
Construtores s˜ao as fun¸c˜oes respons´aveis por inicializar as
vari´aveis dentro de um objeto. Vocˆe chama um construtor
durante a instancia¸c˜ao de um objeto.
Se vocˆe n˜ao criar um construtor, os construtores
implementados automaticamente pelo compilador v˜ao criar
objetos vazios, e ent˜ao, vocˆe precisaria inicializar cada vari´avel
desse objeto separadamente.
Com um construtor vocˆe poupa v´arias linhas de c´odigo ;).
Lucas Lellis Classes em C++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Construtores
Destrutores
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++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Construtores
Destrutores
Destrutores
Sabe-se que o C++ j´a faz coleta autom´atica das vari´aveis e
dos objetos que deixamos para tr´as.
Os Destrutores servem para liberar os dados que foram
alocados dinˆamicamente ( usando new ).
Para liberar a mem´oria alocada pela fun¸c˜ao new, usamos a
fun¸c˜ao delete.
Lucas Lellis Classes em C++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Construtores
Destrutores
Construtor com aloca¸c˜ao dinˆamica 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++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Construtores
Destrutores
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++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Especificadores de acesso
Implementa¸c˜ao das fun¸c˜oes ”get”
Implementa¸c˜ao das fun¸c˜oes ”set”
Encapsulamento
Muitas vezes n˜ao queremos que as outras classes tenham
acesso direto `a vari´aveis e fun¸c˜oes espec´ıficas dos objetos de
uma classe espec´ıfica. A t´ecnica respons´avel pelo controle de
acesso aos elementos de uma classe ´e o ”encapsulamento”.
N´os podemos controlar esse acesso usando os chamados
”especificadores de acesso”.
Os especificadores de acesso s˜ao conhecidos pelos
identificadores ”public”, ”private” e ”protected”.
Lucas Lellis Classes em C++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Especificadores de acesso
Implementa¸c˜ao das fun¸c˜oes ”get”
Implementa¸c˜ao das fun¸c˜oes ”set”
Esses especificadores modificam os direitos de acesso que as
classes e fun¸c˜oes externas tˆem sobre os elementos de uma classe.
Os membros privados ( private ) s˜ao acess´ıveis apenas pelos
membros da pr´opria classe, ou pelas classes ”amigas”.
Os membros protegidos ( protected ), al´em dos direitos dados
pelos membros privados, tamb´em estendem esse acesso `as
classes derivadas ( Herdeiras ).
Quando n˜ao colocamos nenhum especificador, os membros
ser˜ao, obrigatoriamente, do tipo ”protected”.
Quando n˜ao h´a heran¸ca, n˜ao h´a a necessidade de diferenciar
”private” de ”protected”.
Os membros p´ublicos ( public ) s˜ao acess´ıveis atrav´es de
qualquer classe ou fun¸c˜ao que interage com os objetos dessa
classe.
Lucas Lellis Classes em C++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Especificadores de acesso
Implementa¸c˜ao das fun¸c˜oes ”get”
Implementa¸c˜ao das fun¸c˜oes ”set”
Exemplo de utiliza¸c˜ao 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++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Especificadores de acesso
Implementa¸c˜ao das fun¸c˜oes ”get”
Implementa¸c˜ao das fun¸c˜oes ”set”
Se, a partir da main, tentarmos acessar alguma das vari´aveis
protegidas da classe ”ContaBancaria”, o compilador ir´a exibir uma
mensagem de erro;
Tentativa de acesso das vari´aveis protegidas
int main () {
Contabancaria teste ( 1234, 99999 );
cout << teste.agencia; // Impossivel!
}
Mas podemos criar fun¸c˜oes de acesso limitado aos dados:
int getX() : Retornam o valor da vari´avel X.
void setX( int val ) : Modificam o valor da vari´avel X.
Lucas Lellis Classes em C++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Especificadores de acesso
Implementa¸c˜ao das fun¸c˜oes ”get”
Implementa¸c˜ao das fun¸c˜oes ”set”
Podemos exemplificar o uso dos gets estendendo o exerc´ıcio
anterior.
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++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Especificadores de acesso
Implementa¸c˜ao das fun¸c˜oes ”get”
Implementa¸c˜ao das fun¸c˜oes ”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++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Especificadores de acesso
Implementa¸c˜ao das fun¸c˜oes ”get”
Implementa¸c˜ao das fun¸c˜oes ”set”
Agora est´a tudo certo, n´e? .. Bom, na verdade n˜ao, pois n˜ao
podemos permitir que o saldo seja alterado diretamente, que tal
implementar fun¸c˜oes de saque e dep´osito?
Fun¸c˜oes de saque e dep´osito
class ContaBancaria {
void saque ( float valor ) {
if ( saldo >= valor )
saldo -= valor;
}
void deposito ( float valor ){
saldo += valor;
}
}
Lucas Lellis Classes em C++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
Especificadores de acesso
Implementa¸c˜ao das fun¸c˜oes ”get”
Implementa¸c˜ao das fun¸c˜oes ”set”
Para finalizar, vamos mostrar como utilizar essas fun¸c˜oes no
programa.
Usando as fun¸c˜ao 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++
Introdu¸c˜ao
O que s˜ao Objetos e Classes?
Construtores e Destrutores
Encapsulamento
Conclus˜ao
O que vem pela frente?
O que vem pela frente?
Teremos palestras todas as sextas-feiras, abordando cada vez
novos conceitos sobre C++. A pr´oxima ser´a ”Classes - Parte 2”,
onde aprofundaremos nossos conhecimentos sobre as classes em
C++.Lembrando que todas as apresenta¸c˜oes desse ciclo de
palestras ser˜ao colocadas no moodle do PESL!
Nossos canais de comunica¸c˜ao
1 MOODLE do PESL - Curso de C++ :
http://pinguim.pro.br/moodle/course/view.php?id=6
2 Portal do Programa de Educa¸c˜ao em Software Livre
http://pinguim.pro.br/
3 Facebook: https://www.facebook.com/PESL.PInguim
4 Youtube: http://www.youtube.com/user/pinguimvideos/
Lucas Lellis Classes em C++

Mais conteúdo relacionado

Mais procurados

Aula 06 projetos multimídia
Aula 06   projetos multimídiaAula 06   projetos multimídia
Aula 06 projetos multimídia
Fábio Costa
 
Estática 12 edição mecânica para engenharia - hibbeler
Estática 12 edição   mecânica para engenharia - hibbelerEstática 12 edição   mecânica para engenharia - hibbeler
Estática 12 edição mecânica para engenharia - hibbeler
Gleice Leite
 
09 programando em python - classes
 09   programando em python - classes 09   programando em python - classes
09 programando em python - classes
Victor Marcelino
 
Curso java 05 - herança, classes e métodos abstratos
Curso java   05 - herança, classes e métodos abstratosCurso java   05 - herança, classes e métodos abstratos
Curso java 05 - herança, classes e métodos abstratos
Maurício Linhares
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em Java
Denis L Presciliano
 

Mais procurados (20)

Alocação dinâmica em C
Alocação dinâmica em CAlocação dinâmica em C
Alocação dinâmica em C
 
POO - Aula 09 - Herança
POO - Aula 09 - HerançaPOO - Aula 09 - Herança
POO - Aula 09 - Herança
 
Aula 06 projetos multimídia
Aula 06   projetos multimídiaAula 06   projetos multimídia
Aula 06 projetos multimídia
 
Apostila Arduino Basico
Apostila Arduino BasicoApostila Arduino Basico
Apostila Arduino Basico
 
03 raciocinio logico-1
03 raciocinio logico-103 raciocinio logico-1
03 raciocinio logico-1
 
Estática 12 edição mecânica para engenharia - hibbeler
Estática 12 edição   mecânica para engenharia - hibbelerEstática 12 edição   mecânica para engenharia - hibbeler
Estática 12 edição mecânica para engenharia - hibbeler
 
Aula orientação a objetos
Aula orientação a objetosAula orientação a objetos
Aula orientação a objetos
 
Introdução à computação - Aula 11 - Banco de Dados (Definições gerais, SGBD)
Introdução à computação - Aula 11 - Banco de Dados (Definições gerais, SGBD)Introdução à computação - Aula 11 - Banco de Dados (Definições gerais, SGBD)
Introdução à computação - Aula 11 - Banco de Dados (Definições gerais, SGBD)
 
Curso MySQL #03 - Criando um Banco de Dados MySQL
Curso MySQL #03 - Criando um Banco de Dados MySQLCurso MySQL #03 - Criando um Banco de Dados MySQL
Curso MySQL #03 - Criando um Banco de Dados MySQL
 
09 programando em python - classes
 09   programando em python - classes 09   programando em python - classes
09 programando em python - classes
 
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
 
Curso prático Calculadora Científica CASIO fx-82ES PLUS
Curso prático Calculadora Científica CASIO fx-82ES PLUSCurso prático Calculadora Científica CASIO fx-82ES PLUS
Curso prático Calculadora Científica CASIO fx-82ES PLUS
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
 
Curso java 05 - herança, classes e métodos abstratos
Curso java   05 - herança, classes e métodos abstratosCurso java   05 - herança, classes e métodos abstratos
Curso java 05 - herança, classes e métodos abstratos
 
Cálculo numérico, aspectos teóricos e computacionais 2 edição - márcia a. g...
Cálculo numérico, aspectos teóricos e computacionais   2 edição - márcia a. g...Cálculo numérico, aspectos teóricos e computacionais   2 edição - márcia a. g...
Cálculo numérico, aspectos teóricos e computacionais 2 edição - márcia a. g...
 
Apostila java completo
Apostila java completoApostila java completo
Apostila java completo
 
Datacenter apresentação
Datacenter   apresentaçãoDatacenter   apresentação
Datacenter apresentação
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em Java
 
Introdução a Bancos de Dados
Introdução a Bancos de DadosIntrodução a Bancos de Dados
Introdução a Bancos de Dados
 
Linguagem C 07 Registros
Linguagem C 07 RegistrosLinguagem C 07 Registros
Linguagem C 07 Registros
 

Destaque

Aula 13 - Matrizes
Aula 13 - MatrizesAula 13 - Matrizes
Aula 13 - Matrizes
Pacc UAB
 
Aula 12 - Exercícios vetores unidimensionais
Aula 12 - Exercícios vetores unidimensionaisAula 12 - Exercícios vetores unidimensionais
Aula 12 - Exercícios vetores unidimensionais
Pacc UAB
 

Destaque (14)

Aula c++ estruturas de dados
Aula c++   estruturas de dadosAula c++   estruturas de dados
Aula c++ estruturas de dados
 
Aula 01 - Introdução ao C++
Aula 01 - Introdução ao C++Aula 01 - Introdução ao C++
Aula 01 - Introdução ao C++
 
Aula 13 - Matrizes
Aula 13 - MatrizesAula 13 - Matrizes
Aula 13 - Matrizes
 
Aula1 c++ builder
Aula1   c++ builderAula1   c++ builder
Aula1 c++ builder
 
SubProgramas
SubProgramasSubProgramas
SubProgramas
 
Apresentação c++ UFC-Quixadá
Apresentação c++ UFC-QuixadáApresentação c++ UFC-Quixadá
Apresentação c++ UFC-Quixadá
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
 
599026
599026599026
599026
 
Aula 12 - Exercícios vetores unidimensionais
Aula 12 - Exercícios vetores unidimensionaisAula 12 - Exercícios vetores unidimensionais
Aula 12 - Exercícios vetores unidimensionais
 
TRABALHO PARADIGMAS - C++
TRABALHO PARADIGMAS - C++TRABALHO PARADIGMAS - C++
TRABALHO PARADIGMAS - C++
 
Presentation on C++ Programming Language
Presentation on C++ Programming LanguagePresentation on C++ Programming Language
Presentation on C++ Programming Language
 
C++ Funções
 C++ Funções C++ Funções
C++ Funções
 
C++ Presentation
C++ PresentationC++ Presentation
C++ Presentation
 
C++ programming
C++ programmingC++ programming
C++ programming
 

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

ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#
biandamakengo08
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
Infogenius
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Sérgio Souza Costa
 

Semelhante a Aula 02 - Classes em C++ ( Parte 1 ) (20)

Aula03
Aula03Aula03
Aula03
 
Aula 03 - Classes em C++ ( Parte 2 )
Aula 03 - Classes em C++ ( Parte 2 )Aula 03 - Classes em C++ ( Parte 2 )
Aula 03 - Classes em C++ ( Parte 2 )
 
Aula1
Aula1Aula1
Aula1
 
Java7
Java7Java7
Java7
 
ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#
 
Java aula 2
Java aula 2Java aula 2
Java aula 2
 
Linguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e TécnicasLinguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e Técnicas
 
v
vv
v
 
SCJA
SCJASCJA
SCJA
 
Virada Tecnológica 2017
Virada Tecnológica 2017Virada Tecnológica 2017
Virada Tecnológica 2017
 
Análise Orientada a Objetos - Objetos E Classes
Análise Orientada a Objetos  -   Objetos E ClassesAnálise Orientada a Objetos  -   Objetos E Classes
Análise Orientada a Objetos - Objetos E Classes
 
03 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.003 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.0
 
Orientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores AndroidOrientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores Android
 
Aula01-IntroducaoOO.pptx
Aula01-IntroducaoOO.pptxAula01-IntroducaoOO.pptx
Aula01-IntroducaoOO.pptx
 
Atividade 3
Atividade 3Atividade 3
Atividade 3
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
 
Apostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteApostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a Parte
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
 
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e HerançaJava - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 

Mais de PeslPinguim

Apresentação1_
Apresentação1_Apresentação1_
Apresentação1_
PeslPinguim
 
Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10
PeslPinguim
 
Curso Básico de Java - Aula 5
Curso Básico de Java - Aula 5Curso Básico de Java - Aula 5
Curso Básico de Java - Aula 5
PeslPinguim
 
Curso Básico de Java - Aula 4
Curso Básico de Java - Aula 4Curso Básico de Java - Aula 4
Curso Básico de Java - Aula 4
PeslPinguim
 
Curso Básico de Java - Aula 1
Curso Básico de Java - Aula 1Curso Básico de Java - Aula 1
Curso Básico de Java - Aula 1
PeslPinguim
 
Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7
PeslPinguim
 
Curso Básico de Java - Aula 3
Curso Básico de Java - Aula 3Curso Básico de Java - Aula 3
Curso Básico de Java - Aula 3
PeslPinguim
 
Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2
PeslPinguim
 
Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9
PeslPinguim
 
Curso Básico de Java - Aula 8
Curso Básico de Java - Aula 8 Curso Básico de Java - Aula 8
Curso Básico de Java - Aula 8
PeslPinguim
 
Eletrônica aplicada - interruptor sonoro
Eletrônica aplicada - interruptor sonoroEletrônica aplicada - interruptor sonoro
Eletrônica aplicada - interruptor sonoro
PeslPinguim
 

Mais de PeslPinguim (20)

Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
Aula 4 redes Inclusão Digital
Aula 4 redes Inclusão DigitalAula 4 redes Inclusão Digital
Aula 4 redes Inclusão Digital
 
Aula 3 parte 2 software Inclusão Digital
Aula 3 parte 2 software Inclusão DigitalAula 3 parte 2 software Inclusão Digital
Aula 3 parte 2 software Inclusão Digital
 
Aula 3 software Inclusão Digital
Aula 3 software Inclusão DigitalAula 3 software Inclusão Digital
Aula 3 software Inclusão Digital
 
Aula 2 parte 2 hardware Inclusão Digital
Aula 2 parte 2 hardware Inclusão DigitalAula 2 parte 2 hardware Inclusão Digital
Aula 2 parte 2 hardware Inclusão Digital
 
Aula 2 hardware Inclusão Digital
Aula 2 hardware Inclusão DigitalAula 2 hardware Inclusão Digital
Aula 2 hardware Inclusão Digital
 
Apresentação1
Apresentação1Apresentação1
Apresentação1
 
Aula 1 apresentacao
Aula 1 apresentacaoAula 1 apresentacao
Aula 1 apresentacao
 
Aula 5 internet Inclusão Digital
Aula 5 internet Inclusão DigitalAula 5 internet Inclusão Digital
Aula 5 internet Inclusão Digital
 
Apresentação1_
Apresentação1_Apresentação1_
Apresentação1_
 
Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10
 
Curso Básico de Java - Aula 5
Curso Básico de Java - Aula 5Curso Básico de Java - Aula 5
Curso Básico de Java - Aula 5
 
Curso Básico de Java - Aula 4
Curso Básico de Java - Aula 4Curso Básico de Java - Aula 4
Curso Básico de Java - Aula 4
 
Curso Básico de Java - Aula 1
Curso Básico de Java - Aula 1Curso Básico de Java - Aula 1
Curso Básico de Java - Aula 1
 
Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7
 
Curso Básico de Java - Aula 3
Curso Básico de Java - Aula 3Curso Básico de Java - Aula 3
Curso Básico de Java - Aula 3
 
Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2
 
Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9
 
Curso Básico de Java - Aula 8
Curso Básico de Java - Aula 8 Curso Básico de Java - Aula 8
Curso Básico de Java - Aula 8
 
Eletrônica aplicada - interruptor sonoro
Eletrônica aplicada - interruptor sonoroEletrônica aplicada - interruptor sonoro
Eletrônica aplicada - interruptor sonoro
 

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

  • 1. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Palestra: Classes em C++ Lucas Santana Lellis lellis@unifesp.br PESL - Programa de Educa¸c˜ao em Software livre Universidade Federal de S˜ao Paulo 27 de Setembro de 2013 Lucas Lellis Classes em C++
  • 2. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao 1 Introdu¸c˜ao 2 O que s˜ao Objetos e Classes? Objetos Classes 3 Construtores e Destrutores Construtores Destrutores 4 Encapsulamento Especificadores de acesso Implementa¸c˜ao das fun¸c˜oes ”get” Implementa¸c˜ao das fun¸c˜oes ”set” 5 Conclus˜ao O que vem pela frente? Lucas Lellis Classes em C++
  • 3. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Introdu¸c˜ao Nessa palestras vamos apresentar um dos recursos mais importantes do C++: As CLASSES. Vamos introduzir o conceito de classes e apresentar t´ecnicas de implementa¸c˜ao e utiliza¸c˜ao. Tudo o que pode ser visto como um tipo de dado, ou uma classe de objetos ou conceitos, pode ser representado como uma classe. O c´odigo pode ficar muito mais limpo, e muito mais intuitivo. Somado com alguns recursos auxiliares, podemos criar tipos de dados extremamente vers´ateis, sendo poss´ıvel programar seus operadores, e/ou tamb´em, criar classes ”Template” ( Classes que recebem um tipo de dados como parˆametro ). Lucas Lellis Classes em C++
  • 4. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Objetos Classes O que s˜ao Objetos e Classes? Antes de definir o que ´e uma ”classe” em C++, temos que definir o que s˜ao ”Objetos” e ”Classes” no mundo real. Sem os ”objetos” n˜ao ter´ıamos ”classes de objetos”... Vamos tomar emprestado da aula introdut´oria, a defini¸c˜ao que criamos para ”Classes” e para ”Objetos”. Lucas Lellis Classes em C++
  • 5. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Objetos Classes 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 bem definidos para a aplica¸c˜ao. Possuem um estado (valores de atributos) e oferecem opera¸c˜oes (comportamentos) para examinar ou alterar este estado. Lucas Lellis Classes em C++
  • 6. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Objetos Classes Podemos representar um objeto como uma entidade individual, que possui seus atributos e suas fun¸c˜oes. Em C++, os atributos seriam as vari´aveis que guardam suas informa¸c˜oes. E as fun¸c˜oes, ou ( m´etodos ), s˜ao fun¸c˜oes usadas para interagir com esse objeto, como uma fun¸c˜ao usada para mudar algum atributo, por exemplo. Pera a´ı! S´o um detalhe, n´os n˜ao programamos objetos diretamente!! Temos que criar uma CLASSE de objetos antes. Lucas Lellis Classes em C++
  • 7. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Objetos Classes 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 as mesmas fun¸c˜oes, eles pertencem a uma mesma classe. Assim que criamos uma classe, podemos INSTANCIAR um objeto, com seus respectivos atributos, que s˜ao individuais para cada objeto. Lucas Lellis Classes em C++
  • 8. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Objetos Classes Struct: O grande ancestral Ao cursar a mat´eria de ”Algoritmos e Estrutura de Dados”, usando a linguagem C, n´os costum´avamos criar tipos de dados a partir de STRUCTS. Aquilo que fizemos em AED ´e muito parecido com uma classe. Por´em, a orienta¸c˜ao a objetos, em especial o C++, trazem recursos que v˜ao muito al´em do que se pode fazer com um struct. E melhor! D´a pra fazer muita coisa sem usar aloca¸c˜ao dinˆamica e ponteiros. Al´em da seguran¸ca oferecida pela t´ecnica de Encapsulamento, e a reutiliza¸c˜ao de c´odigo que s´o ´e poss´ıvel por causa dos conceitos de orienta¸c˜ao a objetos, como heran¸ca, polimorfismo, e tamb´em pela programa¸c˜ao gen´erica (Templates). Lucas Lellis Classes em C++
  • 9. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Objetos Classes 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 quˆe” e ”como” as outras classes interagem com a nossa classe. Por meio do ”encapsulamento”, que ser´a melhor trabalhado nas pr´oximas palestras. Lucas Lellis Classes em C++
  • 10. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Construtores Destrutores Construtores e Destrutores Como muitos sabem, as classes em C++, em situa¸c˜oes normais, n˜ao precisam da ajuda do programador para fazer a aloca¸c˜ao dinˆamica de mem´oria. Al´em disso ela tem um coletor de lixo. Ou seja, normalmente n˜ao precisamos alocar e liberar mem´oria manualmente, muita coisa j´a ´e implementada durante a compila¸c˜ao do programa. Lucas Lellis Classes em C++
  • 11. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Construtores Destrutores Construtores Construtores s˜ao as fun¸c˜oes respons´aveis por inicializar as vari´aveis dentro de um objeto. Vocˆe chama um construtor durante a instancia¸c˜ao de um objeto. Se vocˆe n˜ao criar um construtor, os construtores implementados automaticamente pelo compilador v˜ao criar objetos vazios, e ent˜ao, vocˆe precisaria inicializar cada vari´avel desse objeto separadamente. Com um construtor vocˆe poupa v´arias linhas de c´odigo ;). Lucas Lellis Classes em C++
  • 12. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Construtores Destrutores 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++
  • 13. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Construtores Destrutores Destrutores Sabe-se que o C++ j´a faz coleta autom´atica das vari´aveis e dos objetos que deixamos para tr´as. Os Destrutores servem para liberar os dados que foram alocados dinˆamicamente ( usando new ). Para liberar a mem´oria alocada pela fun¸c˜ao new, usamos a fun¸c˜ao delete. Lucas Lellis Classes em C++
  • 14. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Construtores Destrutores Construtor com aloca¸c˜ao dinˆamica 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++
  • 15. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Construtores Destrutores 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++
  • 16. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Especificadores de acesso Implementa¸c˜ao das fun¸c˜oes ”get” Implementa¸c˜ao das fun¸c˜oes ”set” Encapsulamento Muitas vezes n˜ao queremos que as outras classes tenham acesso direto `a vari´aveis e fun¸c˜oes espec´ıficas dos objetos de uma classe espec´ıfica. A t´ecnica respons´avel pelo controle de acesso aos elementos de uma classe ´e o ”encapsulamento”. N´os podemos controlar esse acesso usando os chamados ”especificadores de acesso”. Os especificadores de acesso s˜ao conhecidos pelos identificadores ”public”, ”private” e ”protected”. Lucas Lellis Classes em C++
  • 17. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Especificadores de acesso Implementa¸c˜ao das fun¸c˜oes ”get” Implementa¸c˜ao das fun¸c˜oes ”set” Esses especificadores modificam os direitos de acesso que as classes e fun¸c˜oes externas tˆem sobre os elementos de uma classe. Os membros privados ( private ) s˜ao acess´ıveis apenas pelos membros da pr´opria classe, ou pelas classes ”amigas”. Os membros protegidos ( protected ), al´em dos direitos dados pelos membros privados, tamb´em estendem esse acesso `as classes derivadas ( Herdeiras ). Quando n˜ao colocamos nenhum especificador, os membros ser˜ao, obrigatoriamente, do tipo ”protected”. Quando n˜ao h´a heran¸ca, n˜ao h´a a necessidade de diferenciar ”private” de ”protected”. Os membros p´ublicos ( public ) s˜ao acess´ıveis atrav´es de qualquer classe ou fun¸c˜ao que interage com os objetos dessa classe. Lucas Lellis Classes em C++
  • 18. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Especificadores de acesso Implementa¸c˜ao das fun¸c˜oes ”get” Implementa¸c˜ao das fun¸c˜oes ”set” Exemplo de utiliza¸c˜ao 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++
  • 19. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Especificadores de acesso Implementa¸c˜ao das fun¸c˜oes ”get” Implementa¸c˜ao das fun¸c˜oes ”set” Se, a partir da main, tentarmos acessar alguma das vari´aveis protegidas da classe ”ContaBancaria”, o compilador ir´a exibir uma mensagem de erro; Tentativa de acesso das vari´aveis protegidas int main () { Contabancaria teste ( 1234, 99999 ); cout << teste.agencia; // Impossivel! } Mas podemos criar fun¸c˜oes de acesso limitado aos dados: int getX() : Retornam o valor da vari´avel X. void setX( int val ) : Modificam o valor da vari´avel X. Lucas Lellis Classes em C++
  • 20. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Especificadores de acesso Implementa¸c˜ao das fun¸c˜oes ”get” Implementa¸c˜ao das fun¸c˜oes ”set” Podemos exemplificar o uso dos gets estendendo o exerc´ıcio anterior. 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++
  • 21. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Especificadores de acesso Implementa¸c˜ao das fun¸c˜oes ”get” Implementa¸c˜ao das fun¸c˜oes ”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++
  • 22. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Especificadores de acesso Implementa¸c˜ao das fun¸c˜oes ”get” Implementa¸c˜ao das fun¸c˜oes ”set” Agora est´a tudo certo, n´e? .. Bom, na verdade n˜ao, pois n˜ao podemos permitir que o saldo seja alterado diretamente, que tal implementar fun¸c˜oes de saque e dep´osito? Fun¸c˜oes de saque e dep´osito class ContaBancaria { void saque ( float valor ) { if ( saldo >= valor ) saldo -= valor; } void deposito ( float valor ){ saldo += valor; } } Lucas Lellis Classes em C++
  • 23. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao Especificadores de acesso Implementa¸c˜ao das fun¸c˜oes ”get” Implementa¸c˜ao das fun¸c˜oes ”set” Para finalizar, vamos mostrar como utilizar essas fun¸c˜oes no programa. Usando as fun¸c˜ao 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++
  • 24. Introdu¸c˜ao O que s˜ao Objetos e Classes? Construtores e Destrutores Encapsulamento Conclus˜ao O que vem pela frente? O que vem pela frente? Teremos palestras todas as sextas-feiras, abordando cada vez novos conceitos sobre C++. A pr´oxima ser´a ”Classes - Parte 2”, onde aprofundaremos nossos conhecimentos sobre as classes em C++.Lembrando que todas as apresenta¸c˜oes desse ciclo de palestras ser˜ao colocadas no moodle do PESL! Nossos canais de comunica¸c˜ao 1 MOODLE do PESL - Curso de C++ : http://pinguim.pro.br/moodle/course/view.php?id=6 2 Portal do Programa de Educa¸c˜ao em Software Livre http://pinguim.pro.br/ 3 Facebook: https://www.facebook.com/PESL.PInguim 4 Youtube: http://www.youtube.com/user/pinguimvideos/ Lucas Lellis Classes em C++