A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Orientação a Objetos - Programação em C++ 1 o Slides – B : Introdução à OO/C++ Passando à Pratica – Estruturas, Classes e Objetos Engenharia Eletrônica.

Apresentações semelhantes


Apresentação em tema: "1 Orientação a Objetos - Programação em C++ 1 o Slides – B : Introdução à OO/C++ Passando à Pratica – Estruturas, Classes e Objetos Engenharia Eletrônica."— Transcrição da apresentação:

1 1 Orientação a Objetos - Programação em C++ 1 o Slides – B : Introdução à OO/C++ Passando à Pratica – Estruturas, Classes e Objetos Engenharia Eletrônica Prof. Jean Marcelo SIMÃO DAELN/UTFPR

2 2 Passando à Prática Nosso primeiro exemplo irá transformar um programa C em um programa C++

3 3 Exercício – Criar um programa em C com os seguintes requisitos: Crie um programa em C que permita calcular a idade de duas pessoas. Para tal, crie uma struct Pessoa, com ‘campos’ dia, mês, ano e idade. Crie duas variáveis de Pessoa, chamadas Einstein e Newton, na função principal (a função main). Ainda na função main, faça os campos dia, mês e ano de Einstein e Newton receberem valores apropriados. –Obs.: Einstein nasceu 14/03/1879 em e Newton em 04/01/1643. O cálculo da idade se dará comparando o ano de nascimento com o ano atual. Este cálculo se dará em uma função. Esta função recebe como parâmetros de entrada: (a) uma variável Pessoa; e (b) uma constante inteira relativa ao ano atual. Essa função devolve a idade calculada. Faça com que o campo idade de Einstein e o campo idade de Newton recebam valores calculados a partir de chamadas apropriadas do função citada.

4 4 #include struct Pessoa { int dia; int mes; int ano; int idade; }; int main() { struct Pessoa Einstein, Newton; Einstein.dia = 14; Einstein.mes = 3; Einstein.ano = 1879; Newton.dia = 4; Newton.mes = 1; Newton.ano = 1643; Einstein.idade = Calc_Idade ( Einstein, 2009 ); Newton.idade = Calc_Idade ( Newton, 2009 ); printf("A idade de Einstein seria %d \n", Einstein.idade); printf("A idade de Newton seria %d \n", Newton.idade); getchar(); return 0; } Exemplo em C – Versão 1 int Calc_Idade ( struct Pessoa p, int ano ) { int idd = ano - p.ano; return idd; }

5 5 Exercício – Mudar o programa segundos os novos requisitos: O cálculo da idade se dará comparando a data de nascimento com a data atual. Este cálculo se dará em uma função. Esta função recebe como parâmetros de entrada: (a) uma variável Pessoa; e (b) três constantes inteiras relativas ao dia, mês e ano atual. Essa função devolve a idade calculada.

6 6 #include struct Pessoa { int dia; int mes; int ano; int idade; }; int main() { struct Pessoa Einstein, Newton; Einstein.dia = 14; Einstein.mes = 3; Einstein.ano = 1879; Newton.dia = 4; Newton.mes = 1; Newton.ano = 1643; Einstein.idade = Calc_Idade ( Einstein, 28, 8, 2009); Newton.idade = Calc_Idade ( Newton, 28, 8, 2009); printf("A idade de Einstein seria %d \n", Einstein.idade); printf("A idade de Newton seria %d \n", Newton.idade); getchar(); return 0; } Exemplo em C – Versão 2 int Calc_Idade(struct Pessoa p, int dia, int mes, int ano) { int idd = ano - p.ano; if (p.mes > mes) { idd = idd - 1; } else { if (p.mes == mes) { if (p.dia > dia) { idd = idd - 1; } return idd; }

7 7 #include struct Pessoa { int dia; int mes; int ano; int idade; }; int main() { struct Pessoa Einstein, Newton; Einstein.dia = 14; Einstein.mes = 3; Einstein.ano = 1879; Einstein.idade = -1; Newton.dia = 4; Newton.mes = 1; Newton.ano = 1643; Newton.idade = -1; Einstein.idade = Calc_Idade ( Einstein, 28, 8, 2009); Newton.idade = Calc_Idade ( Newton, 28, 8, 2009); printf("A idade de Einstein seria %d \n", Einstein.idade); printf("A idade de Newton seria %d \n", Newton.idade); getchar(); return 0; } Exemplo em C – Versão 2 int Calc_Idade(struct Pessoa p, int dia, int mes, int ano) { p.idade = ano - p.ano; if (p.mes > mes) { p.idade = p.idade - 1; } else { if (p.mes == mes) { if (p.dia > dia) { p.idade = p.idade - 1; } return p.idade; }

8 8 #include struct Pessoa { int dia; int mes; int ano; int idade; }; int main() { struct Pessoa Einstein, Newton; Einstein.dia = 14; Einstein.mes = 3; Einstein.ano = 1879; Einstein.idade = -1; Newton.dia = 4; Newton.mes = 1; Newton.ano = 1643; Newton.idade = -1; Calc_Idade ( Einstein, 28, 8, 2009); Calc_Idade ( Newton, 28, 8, 2009); printf("A idade de Einstein seria %d \n", Einstein.idade); printf("A idade de Newton seria %d \n", Newton.idade); getchar(); return 0; } Exemplo em C – Versão 2 void Calc_Idade(struct Pessoa p, int dia, int mes, int ano) { p.idade = ano - p.ano; if (p.mes > mes) { p.idade = p.idade - 1; } else { if (p.mes == mes) { if (p.dia > dia) { p.idade = p.idade - 1; } Funciona?

9 9 Exemplo em C – Versão 3 void Calc_Idade (struct Pessoa *p, int dia, int mes, int ano) { p->idade = ano – p->ano; if ( p->mes > mes ) { p->idade = p->idade - 1; } else { if ( p->mes == mes ) { if ( p->dia > dia ) { p->idade = p->idade - 1; } #include struct Pessoa { int dia; int mes; int ano; int idade; }; int main() { struct Pessoa Einstein, Newton; Einstein.dia = 14; Einstein.mes = 3; Einstein.ano = 1879; Newton.dia = 4; Newton.mes = 1; Newton.ano = 1643; Calc_Idade ( &Einstein, 24, 8, 2009); Calc_Idade ( &Newton, 24, 8, 2009); printf("A idade de Einstein seria %d \n", Einstein.idade); printf("A idade de Newton seria %d \n", Newton.idade); getchar(); return 0; }

10 10 Exemplo em C – Versão 3 B void Calc_Idade (struct Pessoa *p, int dia, int mes, int ano) { (*p).idade = ano – (*p).ano; if ( (*p).mes > mes ) { (*p). idade = (*p).idade - 1; } else { if ( (*p).mes == mes ) { if ( (*p).dia > dia ) { (*p). idade = (*p).idade - 1; } #include struct Pessoa { int dia; int mes; int ano; int idade; }; int main() { struct Pessoa Einstein, Newton; Einstein.dia = 14; Einstein.mes = 3; Einstein.ano = 1879; Newton.dia = 4; Newton.mes = 1; Newton.ano = 1643; Calc_Idade ( &Einstein, 24, 8, 2009); Calc_Idade ( &Newton, 24, 8, 2009); printf("A idade de Einstein seria %d \n", Einstein.idade); printf("A idade de Newton seria %d \n", Newton.idade); getchar(); return 0; }

11 11 #include struct Pessoa { int dia; int mes; int ano; int idade; }; int main() { struct Pessoa Einstein, Newton; Einstein.dia = 14; Einstein.mes = 3; Einstein.ano = 1879; Einstein.idade = -1; Newton.dia = 4; Newton.mes = 1; Newton.ano = 1643; Newton.idade = -1; Calc_Idade ( Einstein, 28, 8, 2009); Calc_Idade ( Newton, 28, 8, 2009); printf("A idade de Einstein seria %d \n", Einstein.idade); printf("A idade de Newton seria %d \n", Newton.idade); getchar(); return 0; } Exemplo em C – Versão 3 C void Calc_Idade(struct Pessoa& p, int dia, int mes, int ano) { p.idade = ano - p.ano; if (p.mes > mes) { p.idade = p.idade - 1; } else { if ( p.mes == mes) { if (p.dia > dia) { p.idade = p.idade - 1; } Funciona só em C++! Referência escondida!

12 12 Exemplo em C++ - Simples #include struct Pessoa { int diaP; int mesP; int anoP; int idadeP; // A função está dentro da estrutura ou struct void Calc_Idade ( int diaAT, int mesAT, int anoAT) { idadeP = anoAT - anoP; if (mesP < mesAT) { idadeP = idadeP - 1; } else { if (mesP == mesAT) { if (diaP > diaAT) { idadeP = idadeP - 1; } }; int main() { struct Pessoa Einstein, Newton; Einstein.diaP = 14; Einstein.mesP = 3; Einstein.anoP = 1879; Newton.diaP = 4; Newton.mesP = 1; Newton.anoP = 1643; Einstein.Calc_Idade ( 24, 8, 2009 ); Newton.Calc_Idade ( 24, 8, 2009 ); printf("A idade de Einstein seria %d \n", Einstein.idadeP); printf("A idade de Newton seria %d \n", Newton.idadeP); getchar(); return 0; }

13 13 Exemplo em C++ - Construtora #include struct Pessoa { public: int diaP; int mesP; int anoP; int idadeP; // Esta é uma função construtora. // Uma construtora inicializa variáveis Pessoa (int diaNa, int mesNa, int anoNa) { diaP = diaNa; mesP = mesNa; anoP= anoNa; idadeP = -1; } // A função está dentro da estrutura ou struct void Calc_Idade(int diaAT, int mesAT, int anoAT) {... } }; int main() { Pessoa Einstein ( 14, 3, 1879 ); Pessoa Newton ( 4, 1, 1643 ); Einstein.Calc_Idade ( 24, 8, 2009 ); Newton.Calc_Idade ( 24, 8, 2009 ); printf("Einstein teria %d \n", Einstein.idadeP); printf("Newton teria %d \n", Newton.idadeP); getchar(); return 0; }

14 14 Exemplo em C++ - Construtora #include struct Pessoa { public: int diaP; int mesP; int anoP; int idadeP; // Esta é uma função construtora. // Uma construtora inicializa variáveis Pessoa (int diaNa, int mesNa, int anoNa) { diaP = diaNa; mesP = mesNa; anoP= anoNa; idadeP = -1; } // A função está dentro da estrutura ou struct void Calc_Idade(int diaAT, int mesAT, int anoAT) {... } }; int main() { Pessoa Einstein.Pessoa ( 14, 3, 1879 ); Pessoa Newton.Pessoa ( 4, 1, 1643 ); Einstein.Calc_Idade ( 24, 8, 2009 ); Newton.Calc_Idade ( 24, 8, 2009 ); printf("Einstein teria %d \n", Einstein.idadeP); printf("Newton teria %d \n", Newton.idadeP); getchar(); return 0; } Erro

15 15 Exemplo em C++ -.h e.cpp #include struct Pessoa { public: int diaP; int mesP; int anoP; int idadeP; // Esta é uma função construtora. // Uma construtora inicializa variáveis Pessoa(int diaNa, int mesNa, int anoNa) { diaP = diaNa; mesP = mesNa; anoP= anoNa; } // A função está dentro da estrutura ou struct void Calc_Idade(int diaAT, int mesAT, int anoAT) {... } }; #include "Pessoa.h" int main() { Pessoa Einstein( 14, 3, 1879 ); Pessoa Newton( 4, 1, 1643 ); Einstein.Calc_Idade( 24, 8, 2009); Newton.Calc_Idade( 24, 8, 2009); printf("Einstein teria %d \n", Einstein.idadeP); printf("Newton teria %d \n", Newton.idadeP); getchar(); return 0; } Pessoa.h Main.cpp Obs.: Um elemento publico (public) é acessível em qualquer parte do programa, por exemplo no main() ou em qualquer função Em uma estrutura (struct) do C++, todos os elementos são públicos (public) por definição. Mas isto não impede de se explicitar usando a palavra public: antecedendo os elementos.

16 16 Private X Public #include struct Pessoa { private: int diaP; int mesP; int anoP; int idadeP; public: Pessoa(int diaNa, int mesNa, int anoNa) {... } void Calc_Idade(int diaAT, int mesAT, int anoAT) {... } /* muitos programadores chamariam esta função abaixo de getIdade() */ int informaIdade() { return idadeP; } }; #include "Pessoa.h" int main() { Pessoa Einstein ( 14, 3, 1879 ); Pessoa Newton ( 4, 1, 1643 ); Einstein.Calc_Idade ( 24, 8, 2009 ); Newton.Calc_Idade ( 24, 8, 2009 ); printf("Einstein teria %d \n", Einstein.informaIdade()); printf("Newton teria %d \n", Newton.informaIdade()); getchar(); return 0; } Pessoa.h Main.cpp Algo privado (private) em uma estrutura C++ (struct) é acessível apenas no escopo dela. Algo público (public) em uma estrutura é assessível por qualquer elemento do programa, por exemplo no main ou em outra estrutura.

17 17 Exemplo em C++ - Class #include class Pessoa { private: int diaP; int mesP; int anoP; int idadeP; public: Pessoa(int diaNa, int mesNa, int anoNa) {... } void Calc_Idade(int diaAT, int mesAT, int anoAT) {... } int informaIdade() {... } }; #include "Pessoa.h" int main() { Pessoa Einstein ( 14, 3, 1879 ); Pessoa Newton ( 4, 1, 1643 ); Einstein.Calc_Idade ( 24, 8, 2009 ); Newton.Calc_Idade ( 24, 8, 2009 ); printf("Einstein teria %d \n", Einstein.informaIdade()); printf("Newton teria %d \n", Newton.informaIdade()); getchar(); return 0; } Pessoa.h Main.cpp No lugar de struct, em C++, é mais usual utilizar uma class. Uma primeira diferença entre elas é que em uma class os elementos são private por definição. Uma class (classe) representa a estrutura geral de um conjunto de elementos. Por exemplo, a class Pessoa diz que qualquer pessoa terá uma idade e uma ‘data’ de nascimento... Cada elemento criado a partir de uma class se constitui em um object (objeto). Exemplos de objetos da classe Pessoa são os objetos Einstein e Newton.

18 18 Class – Attributes and Methods #include class Pessoa { private: int diaP; int mesP; int anoP; int idadeP; public: Pessoa(int diaNa, int mesNa, int anoNa) {... } void Calc_Idade(int diaAT, int mesAT, int anoAT) {... } int informaIdade() {... } }; Attributes: as “variáveis” de uma classe são chamadas de atributos. Methods: as “funções” de uma classe são chamadas de métodos, funções-membro ou ainda operações.

19 19 Classe dividida em.h e.cpp #include "Pessoa.h“ Pessoa::Pessoa(int diaNa, int mesNa, int anoNa) {... } void Pessoa::Calc_Idade(int diaAT, int mesAT, int anoAT) {... } int Pessoa::informaIdade ( ) // int getIdade() { return idadeP; } #include class Pessoa { private: int diaP; int mesP; int anoP; int idadeP; public: Pessoa(int diaNa, int mesNa, int anoNa); void Calc_Idade(int diaAT, int mesAT, int anoAT); int informaIdade(); // int getIdade(); }; Pessoa.cpp Pessoa.h main.cpp #include "Pessoa.h" int main() { Pessoa Einstein(14, 3, 1879); Pessoa Newton(4, 1, 1643); Einstein.Calc_Idade ( 24, 9, 2009); Newton.Calc_Idade ( 24, 9, 2009); printf("Einstein teria %d \n", Einstein.informaIdade()); printf("Newton teria %d \n", Newton.informaIdade()); getchar(); return 0; }

20 20 Entendendo o encapsulamento #include "Pessoa.h" int main() { Pessoa Einstein ( 14, 3, 1879 ); Pessoa Newton ( 4, 1, 1643 ); Einstein.Calc_Idade ( 24, 8, 2009 ); Newton.Calc_Idade ( 24, 8, 2009 ); printf ( "Einstein teria %d \n", Einstein.informaIdade() ); printf ( "Newton teria %d \n", Newton.informaIdade() ); getchar(); return 0; } Exercício: fazer com que a “impressão” (printf...) da idade ocorra dentro dos próprios objetos, programando isto no método apropriado da classe Pessoa...


Carregar ppt "1 Orientação a Objetos - Programação em C++ 1 o Slides – B : Introdução à OO/C++ Passando à Pratica – Estruturas, Classes e Objetos Engenharia Eletrônica."

Apresentações semelhantes


Anúncios Google