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.

Slides:



Advertisements
Apresentações semelhantes
Um programa em C Bibliotecas Variáveis globais
Advertisements

Funções em C.
Recursividade Prof. Rosana Palazon.
Programação II Estruturas de Dados
Algoritmos e Programação Linguagens de Programação Teoria Aula (09/06)
Algoritmos e Estrutura de Dados I
Programação Básica em Java
INF Computação Gráfica
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Vetores, Matrizes e Funções
Slides Prof. Jean SIMÃO Revisão: Prof. João FABRO
Estruturas de Dados Heterogêneas (struct)
Slides: Prof. SIMÃO Revisão: Prof. João Fabro
Fundamentos de Programação 1
Classes e objetos P. O. O. Prof. Grace.
Aula prática 13 Orientação a Objetos – C++ Parte 1
Conceitos básicos de orientação a objetos
PROGRAMAÇÃO ESTRUTURADA II
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
UNIDADE 6 - complemento Funções recursivas
Programação II Estruturas de Dados Aula 02 - continuação
Prof. Ricardo Santos PONTEIROS
Linguagens de Programação II
Programação orientada a objectos em C++
Árvore Binária de Busca
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Introdução à Linguagem C
Declarando e Chamando Funções
Aula Prática 3 Funções Monitoria Introdução à Programação.
 São utilizadas para dividir um código maior (mais complexo) em partes menores (mais simples).  Quando uma mesma tarefa é realizada várias vezes em um.
Aula prática 3 Aprofundando em Funções Parâmetros de uma função Uso do return Execução Variáveis Global, local e estática Monitoria de Introdução à.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Revisão Luis Antonio Tavares
Comando de Seleção switch
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade.
Aula Prática 3 Funções Monitoria Introdução à Programação.
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Linguaguem de Programação II
PCI- Funções e Procedimentos Profa. Mercedes Gonzales Márquez.
Linguagem de Programação
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C”
Fundamentos de Programação 1 Slides 11 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “ Struct, Union, Enum, Typedef ”
Fundamentos de Programação1 Aula N. 01 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Introdução e elementos principais”
Fundamentos de Programação 1 Aula N. 02 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Laços de Repetição em C”
Fundamentos de Programação 1
Fundamentos de Programação 1 Slides C – Número 4 Prof. SIMÃO Jean Marcelo SIMÃO Estrutura de Dados Homogêneas “vetores de números e de caracteres”
Fundamentos de Programação 1 Slides 7 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Funções”
1 Orientação a Objetos - Programação em C++ 3 o Slides: Relações entre objetos em C++ e UML OO – Engenharia Eletrônica Prof. Jean Marcelo SIMÃO – DAELN.
Estrutura de Dados STRUCTS Dilvan Moreira. Objetivos  Entender o que são e como usar:  Estrutura de Dados para a Linguagem C  Structs (Registros)
1 Orientação a Objetos - Programação em C++ 1 o Conjunto de Slides – A : o Conteúdo da Disciplina, Importância Sistêmica desta, e a Introdução à OO/C++.
Orientação a Objetos - Programação em C++ Slides 11: Herança et al. (Funções Virtuais, Polimorfismo, Herança Múltipla, Funções Virtuais Puras e Classes.
1 Orientação a Objetos - Programação em C++ 2 o Slides: Relações entre objetos em C++ OO – Engenharia Eletrônica Prof. Jean Marcelo SIMÃO.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
1 Aula 07 Strings Prof. Filipe Mutz. 2 Em nossos programas ainda não vimos como armazenar palavras e textos, e eles são muito importantes! Exemplos: Programas.
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
1 Orientação a Objetos - Programação em C++ Slides 9: Programação ou Implementação: uma fase da engenharia de software. Projeto (UML) e Programação (C++,...)
Fundamentos de Programação 1 Slides 18 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Arquivos Seqüências ou de Texto ”. 1.
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
Fundamentos de Programação1
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
Fundamentos de Programação 1
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
Transcrição da apresentação:

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 Passando à Prática Nosso primeiro exemplo irá transformar um programa C em um programa C++

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 #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 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 #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 #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 #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 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 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 #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 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 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 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 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 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 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 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 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 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...