Professor de Engenharia Eletrnica na Faculdade do Gama /UnB Doutor em Engenharia Eltrica (UnB / 2012) Mestre em Engenharia Eltrica (UnB / 2008) Engenheiro eletricista (UnB / 2006) Orientao a objetos A linguagem C considerada uma linguagem procedural
oQuando aprendemos a programar, comeamos fazendo exemplos de cdigo desestruturado: uma funo main contendo tudo o que dever ser feito;
oEm seguida, separamos o cdigo em procedimentos especficos, ou funes;
oTambm utilizamos estruturas (structs) para agrupar variveis de tipos diferentes que representem atributos do problema a resolver. Orientao a objetos A linguagem C considerada uma linguagem procedural
oCada funo do cdigo funciona como um "centro de processamento" isolado ==> da a necessidade de diferenciar a passagem de parmetros por valor e por referncia;
oPodemos tambm criar arquivos separados para funes especficas e para a funo main;
oCada arquivo pode ser visto como um mdulo separado. Orientao a objetos A linguagem C++ considerada uma linguagem orientada a objetos
oAo invs de procedimentos, temos classes e objetos;
oClasses so um apanhado de atributos e procedimentos;
oExemplo: retngulos possuem largura, comprimento, rea e permetro, aonde: rea = largura*comprimento
permetro = 2*(largura+comprimento) Orientao a objetos A linguagem C++ considerada uma linguagem orientada a objetos
oPara representarmos um retngulo em C, poderamos criar uma struct retangulo, do tipo: struct retangulo { float largura, comprimento; float area, perimetro; } Orientao a objetos A linguagem C++ considerada uma linguagem orientada a objetos
oO clculo da rea e do permetro poderiam ser feitos em uma funo da forma: void calc_area_perim( struct retangulo *A) { A->area = (A->largura)*(A->comprimento); A->perimetro = 2*(A->largura + A->comprimento); } Orientao a objetos A linguagem C++ considerada uma linguagem orientada a objetos
oDa mesma forma que agrupamos os parmetros largura, comprimento, area e perimetro em uma estrutura, poderamos agrupar os procedimentos feitos com esses parmetros;
o isso o que a classe faz - agrupa parmetros e procedimentos. Orientao a objetos #include <iostream> using namespace std; class retangulo { public: float larg, comp; float area( ) {return larg*comp; } float perim( ) { return 2*(larg+comp); } }; void main() { retangulo r1; r1.larg = 2.0; r1.comp = 3.0; cout << "Area = " << r1.area(); cout << ", perimetro = " << r1.perim(); } Orientao a objetos #include <iostream> using namespace std; class retangulo { public: float larg, comp; float area( ) {return larg*comp; } float perim( ) { return 2*(larg+comp); } }; void main() { retangulo r1; r1.larg = 2.0; r1.comp = 3.0; cout << "Area = " << r1.area(); cout << ", perimetro = " << r1. perim(); } Aqui, s definimos um tipo genrico, chamado retangulo
Podemos ter vrias instncias desse tipo genrico no cdigo Orientao a objetos #include <iostream> using namespace std; class retangulo { public: float larg, comp; float area( ) {return larg*comp; } float perim( ) { return 2*(larg+comp); } }; void main() { retangulo r1; r1.larg = 2.0; r1.comp = 3.0; cout << "Area = " << r1.area(); cout << ", perimetro = " << r1.perim(); } Definimos que todos os membros de retangulo podem ser acessados de fora da classe. Mais tarde veremos isto com mais profundidade Orientao a objetos #include <iostream> using namespace std; class retangulo { public: float larg, comp; float area( ) {return larg*comp; } float perim( ) { return 2*(larg+comp); } }; void main() { retangulo r1; r1.larg = 2.0; r1.comp = 3.0; cout << "Area = " << r1.area(); cout << ", perimetro = " << r1.perim(); } A classe possui duas variveis, larg e comp, acessadas da mesma forma que membros de uma struct Orientao a objetos #include <iostream> using namespace std; class retangulo { public: float larg, comp; float area( ) {return larg*comp; } float perim( ) { return 2*(larg+comp); } }; void main() { retangulo r1; r1.larg = 2.0; r1.comp = 3.0; cout << "Area = " << r1.area(); cout << ", perimetro = " << r1.perim(); } A classe possui duas funes, area() e perim(), acessadas da mesma forma que membros de uma struct Orientao a objetos #include <iostream> using namespace std; class retangulo { public: float larg, comp; float area( ) {return larg*comp; } float perim( ) { return 2*(larg+comp); } }; void main() { retangulo r1; r1.larg = 2.0; r1.comp = 3.0; cout << "Area = " << r1.area(); cout << ", perimetro = " << r1.perim(); } Declaramos um objeto, r1, da classe retangulo Orientao a objetos #include <iostream> using namespace std; class retangulo { public: float larg, comp; float area( ) {return larg*comp; } float perim( ) { return 2*(larg+comp); } }; void main() { retangulo r1; r1.larg = 2.0; r1.comp = 3.0; cout << "Area = " << r1.area(); cout << ", perimetro = " << r1.perim(); } Definimos a largura e o comprimento do retangulo r1 Orientao a objetos #include <iostream> using namespace std; class retangulo { public: float larg, comp; float area( ) {return larg*comp; } float perim( ) { return 2*(larg+comp); } }; void main() { retangulo r1; r1.larg = 2.0; r1.comp = 3.0; cout << "Area = " << r1.area(); cout << ", perimetro = " << r1.perim(); } As funes area() e perim() fornecem a rea e o permetro de r1, de acordo com os valores indicados anteriormente para r1.larg e r1.comp Orientao a objetos #include <iostream> using namespace std; class retangulo { public: float larg, comp; float area( ) {return larg*comp; } float perim( ) { return 2*(larg+comp); } }; void main() { retangulo r1; r1.larg = 2.0; r1.comp = 3.0; cout << "Area = " << r1.area(); cout << ", perimetro = " << r1.perim(); } Area = 6, perimetro = 10