29
Linguagem de Linguagem de Programação I Programação I Programação I Programação I Carlos Eduardo Batista Centro de Informática - UFPB [email protected]

Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

Linguagem de Linguagem de Programação IProgramação IProgramação IProgramação I

Carlos Eduardo Batista

Centro de Informática - [email protected]

Page 2: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

� Motivação para o uso de C++ para o aprendizado de POO

� Quando usar C e quando usar C++

� C++ versus Java

� Sintaxe básica de C++

� Ambientes de desenvolvimento C++

C++ e POOC++ e POO2

Page 3: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

Motivação para o uso de C++Motivação para o uso de C++3

Page 4: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

� Aprendizado incremental (a partir de C)

� Controle de recursos e desempenho◦ Gerência de memória “manual”

◦ Abstrações POO + Responsabilidade

� Maior controle da compilação

� Aprender C++ facilita o aprendizadoposterior de Java

MotivaçãoMotivação parapara o o usouso de C++de C++

posterior de Java

� Mais fácil de se otimizar o desempenho

� C++ não é linguagem para preguiçosos

4

Page 5: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

� C◦ Código de baixo nível (drivers, kernel)◦ Dispositivos embarcados (suporte)◦ Fortes requisitos de desempenho*

� C++◦ Sistemas de infraestrutura ◦ 90% dos jogos são em C++◦ Sistemas operacionais (Windows, *nix)

Quando usar C e quando usar C++Quando usar C e quando usar C++

◦ Sistemas operacionais (Windows, *nix)

� Onde C/C++ não são populares...◦ Dispositivos móveis (iOS e Android)◦ Web

5

Page 6: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

� Padronização◦ C++ � ISO/IEC 14882

� ISO/IEC JTC1/SC22/WG21 committee

� C++ 11

◦ Java� Java Language Specification (Oracle)

C++ versus JavaC++ versus Java6

Page 7: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

� C++◦ Estende C (linguagem imperativa/procedural)◦ Acrescenta suporte a POO de tipagem estática

� Tratamento de exceções� Gerenciamento de escopo� Metaprogramação (templates)� Biblioteca padrão (STD) � Write once, compile anywhere (WOCA)

� Java

C++ versus JavaC++ versus Java

� Java� Sintaxe fortemente baseada em C/C++� Máquina virtual (JVM)� Concorrência� JNI – Java Native Interface� Write once, run anywhere (WORA)

7

Page 8: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

� Assimilam alguns conceitos de POO de forma diferente

� http://en.wikipedia.org/wiki/Comparison_of_Java_and_C++

C++ versus JavaC++ versus Java8

Page 9: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

� Hello World

� Declarações

� I/O

� De Structs em C a Classes em C++

Sintaxe básica de C++Sintaxe básica de C++9

Page 10: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

#include <iostream> // incluir biblioteca de IO

int main() // função onde o programa é iniciado {

cout << "Hello World"; // exibe "Hello World" return 0; // devolve ao SO. o valor 0 (sucesso)

}

Sintaxe básica de C++Sintaxe básica de C++10

Page 11: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

� Declarações◦ Em ANSI C as declarações antecedem as instruções

◦ Em C99 e C++ as declarações e instruções podem se misturar

◦ Declarações na condição de uma instrução do tipo if

Serve como uma restrição de escopo (o bloco

Sintaxe básica de C++Sintaxe básica de C++

� Serve como uma restrição de escopo (o bloco definido pelo if)

11

Page 12: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

double g(int a, double d){return a * d;

}void f(double p){

int i = 0; double result;

//...if (p <= 10.0) i ++;

Sintaxe básica de C++Sintaxe básica de C++12

if (p <= 10.0) i ++; //...

result = g(i,p); }

int main(){f(5.0);

}

Page 13: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

double g(int a, double d){return a * d;

}void f(double p){

int i = 0;

// ...if (p <= 10.0) i++; // ...

double result = g(i,p); //Declara e usa result

Sintaxe básica de C++Sintaxe básica de C++13

}

int main(){f(5.0);

}

Page 14: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

� Declaração dentro de if◦ Atribuição deve iniciar condição

� Declaração em outras instruções/laços

// se get() retorna valor diferente de NULL// realiza instrução w->fire()if(weapon *w = get()) {

w->fire();}

Sintaxe básica de C++Sintaxe básica de C++

� Declaração em outras instruções/laços

14

if(int i = value) ...;for(...; int i = value; ...) ...;switch(int i = value) ...;while(int i = value) ...;

Page 15: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

� Entrada e Saída em C++◦ <ostream> e <istream>

� Operadores ◦ >> (pegar de)

◦ << (por em)

� printf e scanf◦ Não são generalizáveis para tipos definidos

Sintaxe básica de C++Sintaxe básica de C++

◦ Não são generalizáveis para tipos definidos pelo usuário

15

Page 16: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

� cin – entrada padrão

� cout – saída padrão

� cerr – saída de erro padrão

� Estados◦ stream.good()

◦ stream.eof()

◦ stream.fail()

Sintaxe básica de C++Sintaxe básica de C++

◦ stream.fail()

◦ stream.bad()

16

Page 17: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

#include <iostream>#include <string>

using namespace std;

int main(){int i;

while (cin >> i) // boolean - conversão implícitacout << 2*i << " ";

Sintaxe básica de C++Sintaxe básica de C++17

cout << "The End";

}

Page 18: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

� Manipuladores◦ Aceitos pelos operadores de E/S << e >>

◦ Altera o estado do stream

◦ Ponteiro para uma função#include <iostream>#include <iomanip>#include <string>

using namespace std ;

Sintaxe básica de C++Sintaxe básica de C++18

using namespace std ;

int main(){

cout << 17 << endl << showbase<< hex << 17 << endl<< oct << 17 << endl;

}

//17//0x11//021

Page 19: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

#include <iostream>#include <iomanip>#include <string>

using namespace std;

int main(){double d = 3.12345678;

cout << d << endl<< scientific << d << endl

//3.12346//3.123457e+00//######3.1234567800

Sintaxe básica de C++Sintaxe básica de C++19

<< scientific << d << endl<< fixed<< setprecision(10) << setfill('#') << setw(18) << d << endl;

}

Page 20: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

� De estruturas a classes...

� Definir uma estrutura genérica que depois pode ter algumas de suas partes modificadas

� Hierarquia “tipo de”

� Ponteiros para funções

Antes de nos aprofundarmos nos

Sintaxe básica de C++Sintaxe básica de C++

� Antes de nos aprofundarmos nos conceitos do paradigma OO...

20

Page 21: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

� Definindo classes/objetos em C++

� Um objeto é uma instância de uma classe e referencia algo (delimitado) na memória

� Declarando classes em C++

� Atributos

� Funções membro (métodos)

Sintaxe básica de C++Sintaxe básica de C++21

Page 22: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

class Casa{public:

int numero, numQuartos; bool jardim;

};

main(){

Casa minhaCasa ;

Sintaxe básica de C++Sintaxe básica de C++22

Casa minhaCasa ;minhaCasa.numero=500; minhaCasa.numQuartos=4;minhaCasa.jardim=1;return 0;

}

Page 23: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

class Retangulo{public:

int altura, largura;int area(){

return altura*largura;}

};main(){

Sintaxe básica de C++Sintaxe básica de C++23

{Retangulo r;r.altura=5;r.largura=2;cout << r.area();return 0;

}

Page 24: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

class Retangulo{public:

int altura, largura;int area();

};int Retangulo::area()

{return altura*largura;

}

Sintaxe básica de C++Sintaxe básica de C++24

main(){

Retangulo r;r.altura=5;r.largura=2;cout << r.area();return 0;

}

Page 25: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

� Construtores e inicialização de variáveis de um objeto◦ Variáveis necessárias para a realização de funcionalidades oferecidas pelo objeto

� Para cada membro (instância) uma inicialização distinta

Sintaxe básica de C++Sintaxe básica de C++25

Page 26: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

class Retangulo{private:

int altura, largura;public:

Retangulo(int a, int l) {altura=a;largura=l;

}int area() {

return altura*largura;

Sintaxe básica de C++Sintaxe básica de C++26

return altura*largura;}

};main() {

Retangulo r(5, 2);cout << r.area();return 0;

}

Page 27: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

� Ambientes de desenvolvimento C++

� Fundamentação de Orientação a Objetos (OO).

� Modelagem de sistemas orientada a objetos usando C++

Próxima aulaPróxima aula27

Page 28: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

� http://www.cplusplus.com/doc/tutorial/

� http://gillius.org/ooptut/

� http://people.cs.aau.dk/~normark/ap/basic-facilities.html

� http://linuxgazette.net/issue55/williams.html

ReferênciasReferências28

Page 29: Carlos Eduardo Batista Centro de Informática -UFPB bidu@ci ...wiki.cbatista.net/lib/exe/fetch.php/lpi-aula03-alinguagemcpp-pt2.pdfLPI-Aula03-POO_CPP_pt1 Author: Bidu Created Date:

Linguagem de Linguagem de Programação IProgramação IProgramação IProgramação I

Carlos Eduardo Batista

Centro de Informática - [email protected]