Anda di halaman 1dari 21

Universidade Federal de Ouro Preto Departamento de Computao

Programao II (BCC702) Orientao a Objetos

Vicente Amorim vjpamorim@iceb.ufop.br www.decom.ufop.br/vicente

quinta-feira, 29 de setembro de 2011

Conceitos Iniciais

www.decom.ufop.br/vicente
quinta-feira, 29 de setembro de 2011

Classes e Objetos - Conceitos Iniciais:


Classes:
* Uma classe pode ser denida como uma maneira lgica de se organizar dados e funes numa mesma estrutura; * uma extenso de uma estrutura (struct) em C, adicionando a capacidade de se abstrair dados e reaproveitar cdigo de uma maneira mais eciente; * Possibilidade de se atribuir nveis de visibilidade a cada um de seus membros internos; * Criao de tipos compostos anlogos s estruturas (struct) da linguagem C; * Incluem principalmente o conceito de objetos, polimorsmo, sobrecarga e herana.

www.decom.ufop.br/vicente
quinta-feira, 29 de setembro de 2011

Classes e Objetos - Conceitos Iniciais:


Objetos:
* So basicamente elementos dados parametrizados atravs da declarao e utilizao de classes relacionadas; * Pode ser denido tambm como uma entidade lgica que contm dados e cdigo especco para a manipulao de tais dados; * Faz uso das declaraes de visibilidade explicitadas na classes; * Um objeto uma varivel de um tipo denido.

www.decom.ufop.br/vicente
quinta-feira, 29 de setembro de 2011

Classes e Objetos - Formato e uso das classes:


* Antes de estar disponvel ao uso, uma classe deve ser (obviamente) declarada - isto , explicitada em linguagem no cdigo-fonte. Para tanto, o seguinte formato deve ser seguido:
#include <iostream.h> class <nome_da_classe> <:lista_base> { ! <componentes_privados> ! ! public: ! <componentes_publicos> };

www.decom.ufop.br/vicente
quinta-feira, 29 de setembro de 2011

Classes e Objetos - Formato e uso das classes:


* Antes de estar disponvel ao uso, uma classe deve ser (obviamente) declarada - isto , explicitada em linguagem no cdigo-fonte. Para tanto, o seguinte formato deve ser seguido: Nome da classe
sendo declarada.
#include <iostream.h> class <nome_da_classe> <:lista_base> { ! <componentes_privados> ! ! public: ! <componentes_publicos> };

Lista (opcional) das super classes da qual esta mesma deriva. Lista de elementos/componentes privados. Opcionalmente utiliza-se a palavra-chave private para explicit-los. Lista de elementos/componentes pblicos de uma class. Obrigatoriamente utiliza-se a palavra-chave public pra explicit-los.

www.decom.ufop.br/vicente
quinta-feira, 29 de setembro de 2011

Classes e Objetos - Exemplo:


* Classe automvel com diversos elementos como membros que em conjunto denem o papel e modo de operao da classe.
#include <iostream.h> #define SIZE_NAME 100 class Automovel { ! int num_portas; ! int num_rodas; ! ! ! ! public: ! int numero_assentos; ! float tamanho_portaMalas; }; private: bool transmissaoAutomatica; char marca[SIZE_NAME];

Automovel.h

www.decom.ufop.br/vicente
quinta-feira, 29 de setembro de 2011

Classes e Objetos - Exemplo (Utilizao):


* chamado de instanciao o processo de alocao de memria (esttica ou dinmica) para as denies feitas numa classe. A classe utilizada como uma regra de criao para um objeto - que ser o produto nal de tal operao.
#define SIZE_NAME 100 class Automovel { ! int num_portas; ! int num_rodas; ! ! ! ! public: ! int numero_assentos; ! float tamanho_portaMalas; }; private: bool transmissaoAutomatica; char marca[SIZE_NAME];

Automovel.h

#include "Automovel.h" #include <iostream.h> int main() { ! Automovel autoM;

main.cpp

! cout << "Automovel com " << autoM.numero_assentos << " assentos." << endl; autoM.tamanho_portaMalas = 10.7; ! cout << "Automovel com " << autoM.tamanho_portaMalas << " litros no portaMalas" << endl; ! } return 0;

www.decom.ufop.br/vicente
quinta-feira, 29 de setembro de 2011

Classes e Objetos - Permission Labels:


* Utilizados para se explicitar o nvel de acesso de um conjunto de membros da classe (mtodos/funes ou atributos). public: Membros denidos com essa permisso esto visveis publicamente. private: Membros denidos com essa permisso s so visveis dentro da prpria classe. protected: Membros denidos com essa permisso no so visveis publicamente, mas podem tambm ser acessados pelas classes derivadas da atual.

www.decom.ufop.br/vicente
quinta-feira, 29 de setembro de 2011

Classes e Objetos - Permission Labels:


#include "Automovel.h" #include <iostream.h> int main() { ! Automovel autoM; autoM.num_portas = 3; // um veloster ou uma kombi ! cout << "Automovel com " << autoM.num_portas << " portas." << endl; autoM.tamanho_portaMalas = 10.7; ! cout << "Automovel com " << autoM.tamanho_portaMalas << " litros no portaMalas" << endl; ! } return 0;

main.cpp

www.decom.ufop.br/vicente
quinta-feira, 29 de setembro de 2011

Classes e Objetos - Permission Labels:


#include "Automovel.h" #include <iostream.h> int main() { ! Automovel autoM;

main.cpp

autoM.num_portas = 3; // um veloster ou uma kombi ! cout << "Automovel com " << autoM.num_portas << " portas." << endl; autoM.tamanho_portaMalas = 10.7; ! cout << "Automovel com " << autoM.tamanho_portaMalas << " litros no portaMalas" << endl; ! } return 0;

Atributo num_portas private. No pode ser acessado diretamente.

www.decom.ufop.br/vicente
quinta-feira, 29 de setembro de 2011

Classes e Objetos - Funes Membro:

* Como fazer para acessar um membro privado? (private) * Soluo: Funes membro. * Funes membro: - Declaradas como membros da classe relacionada; - So consideradas como estando dentro do escopo da classe.
Automovel.h
#include "Automovel.h" int Automovel::getNumPortas() { ! return num_portas; } int Automovel::getNumRodas() { ! return num_rodas; } void Automovel::setNumPortas(int num_portas) { ! this->num_portas = num_portas; } void Automovel::setNumRodas(int numeroRodas) { ! num_rodas = numeroRodas; }

#define SIZE_NAME 100

Automovel.cpp

class Automovel { ! int num_portas; ! int num_rodas; ! bool transmissaoAutomatica; ! char marca[SIZE_NAME]; ! ! public: ! int getNumPortas(); ! int getNumRodas(); ! void setNumPortas(int num_portas); ! void setNumRodas(int numeroRodas); ! int numero_assentos; ! float tamanho_portaMalas; };

www.decom.ufop.br/vicente
quinta-feira, 29 de setembro de 2011

Classes e Objetos - Funes Membro (cont.):


#include "Automovel.h" #include <iostream.h> int main() { ! Automovel autoM; ! ! ! ! ! ! } autoM.setNumPortas(3); cout << "Automovel com " << autoM.getNumPortas() << " portas." << endl; autoM.tamanho_portaMalas = 10.7; cout << "Automovel com " << autoM.tamanho_portaMalas << " litros no portaMalas" << endl; return 0;

main.cpp

* Sada:
Automovel com 3 assentos. Automovel com 10.7 litros no portaMalas

www.decom.ufop.br/vicente
quinta-feira, 29 de setembro de 2011

Classes e Objetos - Construtores / Destrutores:


* Como j descrito, em linguagens de programao, quando uma varivel de um tipo existente declarada, o compilador (ou desenvolvedor) cria um espao na memria para a mesma. * At agora, declarvamos as variveis para depois inicializ-las. Entretanto, C++ permite que se faa as duas coisas com apenas uma chamada. * Analogamente, quando uma varivel perde o escopo, o compilador (ou desenvolvedor) faz com que o espao de memria daquela varivel seja liberado. * Escopo de uma varivel? - Espao no qual a mesma pode ser enxergada e acessada.

www.decom.ufop.br/vicente
quinta-feira, 29 de setembro de 2011

Classes e Objetos - Construtores / Destrutores:


#include "Automovel.h"

* Exemplo (escopo):
Escopo da varivel numeroPortas.

int Automovel::getNumPortas() { int numeroPortas = 2*num_portas; ... ... ... ... cout << ... ... << numeroPortas; ... ... ... ! return numeroPortas; } int Automovel::getNumRodas() { return num_rodas; }

* Escopo da varivel numeroPortas somente dentro da rea demarcada, pois fora dela a varivel no pode ser mais acessada.

www.decom.ufop.br/vicente
quinta-feira, 29 de setembro de 2011

Classes e Objetos - Construtores / Destrutores:


* Funes construtoras: - So chamadas todas as vezes que a as variveis / objetos so declarados (instanciados estaticamente ou dinamicamente); - Literalmente permite construir a varivel / objeto declarado; - Responsvel pela inicializao dos atributos e dados internos de uma funo (pblicos ou privados); * Funes destrutoras: - So chamadas todas as vezes que a varivel / objeto relacionado perde o escopo; - Literalmente permite destruir a varivel / objeto declarado; - Responsveis pela liberao de recursos previamente utilizados (memria, fechamento de streams de dados, etc).

www.decom.ufop.br/vicente
quinta-feira, 29 de setembro de 2011

Classes e Objetos - Construtores / Destrutores:


* Exemplo (construtores):
#define SIZE_NAME 100

#include "Automovel.h"

Automovel.cpp

Automovel.h

class Automovel { ! int num_portas; ! int num_rodas; ! bool transmissaoAutomatica; ! char marca[SIZE_NAME]; ! ! public: ! Automovel(); ! int getNumPortas(); ! int getNumRodas(); ! void setNumPortas(int num_portas); ! void setNumRodas(int numeroRodas); ! int numero_assentos; ! float tamanho_portaMalas; };

Automovel::Automovel() { cout << "Construindo classe Automovel" << endl; ! num_portas = 4; ! num_rodas = 4; ! transmissaoAutomatica = true; ! strcpy(marca,"Ferrari"); ! numero_assentos = 2; ! tamanho_portaMalas = 30.0; } int Automovel::getNumPortas() { ! return num_portas; } int Automovel::getNumRodas() { ! return num_rodas; } void Automovel::setNumPortas(int num_portas) { ! this->num_portas = num_portas; }

Construtor.

void Automovel::setNumRodas(int numeroRodas) { ! num_rodas = numeroRodas; }

www.decom.ufop.br/vicente
quinta-feira, 29 de setembro de 2011

Classes e Objetos - Construtores / Destrutores:


* Exemplo (construtores):
#define SIZE_NAME 100

#include "Automovel.h" #include <iostream.h>

Automovel.cpp

Automovel.h

class Automovel { ! int num_portas; ! int num_rodas; ! bool transmissaoAutomatica; ! char marca[SIZE_NAME]; ! ! public: ! Automovel(int numeroPortas); ! int getNumPortas(); ! int getNumRodas(); ! void setNumPortas(int num_portas); ! void setNumRodas(int numeroRodas); ! int numero_assentos; ! float tamanho_portaMalas; };

Automovel::Automovel(int numeroPortas) { ! cout << "Construindo classe Automovel" << endl; ! num_portas = numeroPortas; ! num_rodas = 4; ! transmissaoAutomatica = true; ! strcpy(marca,"Ferrari"); ! numero_assentos = 2; ! tamanho_portaMalas = 30.0; } int Automovel::getNumPortas() { ! return num_portas; } int Automovel::getNumRodas() { ! return num_rodas; } void Automovel::setNumPortas(int num_portas) { ! this->num_portas = num_portas; }

Construtor.

void Automovel::setNumRodas(int numeroRodas) { ! num_rodas = numeroRodas; }

www.decom.ufop.br/vicente
quinta-feira, 29 de setembro de 2011

Classes e Objetos - Construtores / Destrutores:


* Exemplo (destrutores):
#define SIZE_NAME 100 #include "Automovel.h" #include <iostream.h>

Automovel.cpp

Automovel.h

class Automovel { ! int num_portas; ! int num_rodas; ! bool transmissaoAutomatica; ! ! public: ! Automovel(int numeroPortas); ! ~Automovel(); ! int getNumPortas(); ! void setNumPortas(int num_portas); ! int numero_assentos; ! float tamanho_portaMalas; };

Automovel::Automovel(int numeroPortas) { ! cout << "Construindo classe Automovel" << endl; ! num_portas = numeroPortas; ! num_rodas = 4; ! transmissaoAutomatica = true; ! numero_assentos = 2; ! tamanho_portaMalas = 30.0; } Automovel::~Automovel() { ! cout << "Destruindo classe Automovel" << endl; ! num_portas = 0; } int Automovel::getNumPortas() { ! return num_portas; } void Automovel::setNumPortas(int num_portas) { ! this->num_portas = num_portas; }

Destrutor

www.decom.ufop.br/vicente
quinta-feira, 29 de setembro de 2011

Classes e Objetos - Construtores / Destrutores:


* Exemplo (chamada - alocao esttica):
#include "Automovel.h" #include <iostream.h> int main() { ! Automovel autoM(4); ! cout << "Automovel com " << autoM.getNumPortas() << " portas." << endl; ! ! /* ... */ ! } return 0;

main.cpp

* Sada:
Construindo classe Automovel Automovel com 4 portas. Destruindo classe Automovel

www.decom.ufop.br/vicente
quinta-feira, 29 de setembro de 2011

Classes e Objetos - Construtores / Destrutores:


* Exemplo (chamada - alocao esttica):
#include "Automovel.h" #include <iostream.h> int main() { ! Automovel *autoM = new Automovel(4); ! ! ! ! ! ! } cout << "Automovel com " << autoM->getNumPortas() << " portas." << endl; /* ... */ delete autoM; return 0;

main.cpp

* Sada:
Construindo classe Automovel Automovel com 4 portas. Destruindo classe Automovel

www.decom.ufop.br/vicente
quinta-feira, 29 de setembro de 2011

Anda mungkin juga menyukai