Paradigmas e Ferramentas de Desenvolvimento de Software – Revisão da linguagem C++ Lúbia Vinhas DPI - INPE.

Slides:



Advertisements
Apresentações semelhantes
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 10 Criado por Frederick H. Colclough, Colorado Technical University Ponteiros e Vetores.
Advertisements

Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.
Programação em Java Prof. Maurício Braga
Programação Orientada a Objetos*
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Marco Antonio Montebello Júnior
Paulo Marques Hernâni Pedroso
Programação II Estruturas de Dados
Orientação a Objetos: Encapsulamento e Classificação
Programação Básica em Java
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
Variáveis Dinâmicas Caixas de Nós
Alocação Dinâmica de Memória
Políticas Curso de aprofundamento em linguagem C.
Linguagem C LPG-I – Variáveis Estruturadas – Vetores
LPG - I: Alocação Dinâmica de Memória - Ponteiros
Ponteiros em C.
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Universidade de Brasília
VETORES, STRINGS E MATRIZES
Escola Secundária c/ 3º CEB da Batalha
2002/2003 Programação Orientada para Objectos 1 Aula 5 Memória livre e instâncias dinâmicas Criação de instâncias dinâmicas Destruição de instâncias dinâmicas.
Classes e objetos Arrays e Sobrecarga
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Aula prática 8 Ponteiros Monitoria de Introdução à Programação
Aula prática 13 Orientação a Objetos – C++ Parte 1
Aula prática 8 Ponteiros Monitoria de Introdução à Programação.
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Curso de Nivelamento LCG
Definição de Tipos Estruturas e Ponteiros
Estruturas de Dados com Jogos
GEJAVA IV SCJA – Certificação Sun java associado exame cx
Alocação Dinâmica de Memória
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 5 ESTRUTURAS DE DADOS HOMOGÊNEAS
Tipos de Dados Paradigmas de Programação
Tipos Abstratos de Dados
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
Uso de parâmetros na linha de comando. Parâmetros da função main:
1 Alocação Dinâmica Quando se declara arrays o tamanho deve ser fixo e definido primeiramente –Alocação estática Pode-se alocar dinamicamente o espaço.
MSc. Marcelo Torres – professortorres.com.br. Linguagem de Programação 01 - Introdução à Linguagem C MSc. Marcelo Torres – professortorres.com.br.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Joaquim José Hangalo  Podemos entender a memória do computador como um conjunto de células que armazenam informações.  Cada célula.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Linguagem C.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Profa. Patrícia A. Jaques
Prof. Marcos LABORATÓRIO DE PRÁTICA DE PROGRAMAÇÃO 06.
Ponteiros em C Prof. Kariston Pereira
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
 O que são arrays:  estruturas de dados homogêneas  coleção de elementos do mesmo tipo referenciada por um nome comum  um array pode ser imaginado.
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista POO para Redes de Computadores.
Linguagem de Programação
1 Programação – JAVA Unidade - 4 Arrays e Strings Prof. Aparecido V. de Freitas Mestre e Doutorando em Engenharia da Computação pela EPUSP.
Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.
Estrutura de Dados Prof. André Cypriano M. Costa
Aula Prática 6 Ponteiros Monitoria  Quando declaramos uma matriz:  tipo meuArray[tam];  O compilador aloca a matriz em uma região de memória.
Strings e Arrays Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ PAE: Pedro Shiguihara Professor: Dilvan Moreira.
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Transcrição da apresentação:

Paradigmas e Ferramentas de Desenvolvimento de Software – Revisão da linguagem C++ Lúbia Vinhas DPI - INPE

Histórico  Criada e desenvolvida por Bjarne Stroustroup no AT&T Bell Laboratories na década de 80   Orientada-a-objetos

Requisitos de C++  Mecanismos de linguagem voltados para permitir a criação de tipos que são mais apropriados a nossa maneira de pensar ou ao nosso domínio de aplicação, do que aqueles internos da linguagem  O mecanismo de C++ para a criação de tipos definidos pelo usuário são as classes (seguindo aquele da linguagem Simula)  Através das abstrações em classes é possível a criação de tipos concretos e abstratos por parte dos usuários

Elementos básicos  Tipos bool, char, int, float, double enum void Ponteiros: int* Vetores: char[] Referências: double&  Tamanhos e comportamento são definidos pela implementação  Declarações e definições char ch; int count = 1;

Elementos Básicos  Ponteiros: para um dado tipo T, T* é do tipo “ponteiro para T ”  Indireção: operador * retorna “o conteúdo do ponteiro”  Zero: 0 é convertido para int, em C++ melhor do que NULL (C)  Arrays: para um dado tipo T, T[ size ] é um “vetor de size elementos do tipo T ”  Devem ser inicializados com tamanhos constantes: int v1[10]; int v2[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};  Nome de um array pode ser utilizado como ponteiro para elemento inicial int* p1 = v2; p1++; // (*p1) é igual a 2

Elementos básicos  Constantes: const int tam = 90;  Ponteiros e constantes: char* const cp; // ponteiro constante para um caracter char const* pc; // ponteiro para um caracter constante const char*pc2; // ponteiro para um caracter constante  Referências: são nomes alternativos para objetos int i=1; int& r=i; // r e i referenciam o mesmo inteiro void incr(int& aa) { aa++; } incr(i); // i = 2;

Elementos básicos  Alocação e liberação de memória: objetos possuem vida útil dentro do escopo de programa onde são criados  Para criar objetos que existem independente do escopo onde foram criados: new e delete (“on the free store”)  Um objeto criado por new existe até que seja destruído por delete Node* no = new Node; // objeto individual delete no; int* q = new int[10];// array de objetos delete []q;

Elementos básicos: funções  Funções extern void swap(int*, int*); // declaração void swap (int* p, int* q)// definição { int t = *q; *p = *q; *q = t; }  Variáveis estáticas void f(int a) { static int n = 0; int x = 0; cout << “n = “ << n++ << “x = “ << x++; }

Elementos Básicos: funções  Passagem de parâmetros: void f(int val, int& ref) { val++; ref++; }  Eficiência: passar objetos grandes por referência mas fazê-los constante para evitar modificações void g (const Large& arg) {...// valor de arg não pode ser alterado }  Arrays são passados como argumentos através de ponteiro para sua primeira posição main() { int i=1; int j=1; f(i,j); }

Elementos básicos: funções  Valor de retorno: int f() { int i=0; return i; } int* fp() { int local=0; return &local; } // erro! int& fr() { int local=0; return local; } // erro!  Overloading: possível tomando-se em conta os tipos de parâmetros void print(int); void print(const char*); void print(double);  Argumento default Void print(int value, int base=10);

Classes  Mecanismo de C++ que permite aos usuários a contrução de tipos, que poedem ser usados convenientemente como tipos básicos (“user defined” e “built-in”)  Um tipo é a representação de um conceito (ex: tipo float e operações +, -, *,/ é a representação do conceito matemático de um número real)  Uma classe é um tipo definido pelo usuário, que não tem similar entre os tipos nativos.

Classes class Date{ private: int d, m, y;// membros static Date default_date; public: void init(int dd, int mm, int yy); // métodos void addYear(int n); void addMonth(int n); void addDay(int n); static void set_default (int, int, int); }  Membros estásticos são parte das classes mas não parte dos objetos void f() { Date::set_default(4,5,1945); }

Controle de acesso  Membros/Métodos private de uma classe são accessíveis somente pelos outros membros da mesma classe ou por classes friend  Membros/Métodos protected são accessíveis também pelas classes derivadas de uma classe  Membros/Métodos public são acessíveis a partir de qualquer ponto onde a classe é visível

Construtores  São a forma de inicialização de objetos de uma determinada classe class Date{ //... Date(int, int, int); // construtor };  Construtores podem ser sobrecarregados, ou seja, podem ser fornecidas diferentes versões com diferentes tipos de parâmetros  Se não for fornecido nenhum construtor, o compilador irá criar um default Date hoje = Date(2,10,2002); Date natal(25,12,2002); Date aniver;// Erro! Não existe Date() Date versao_3(10,10);// Erro! Nao existe Date com 3 args

Construtores  Aceitam valores default ( Date(int, int, int yy=2002) )  Construtor Default não recebe parâmetros ( Date() ) Date d1;  Construtor de cópia: constrói um objeto novo a partir de um outro já criado Date d2(d1); Date d3 = d1;  Passar parâmetros por valor, implica chamada no construtor de cópia, portanto prefira a passagem de parâmetros por referência  Se necessário e não fornecido pelo usuário, o compilador irá criar um

Construtores  Prefira lista de inicialização ao invés de atribuição no corpo do construtor: Date::Date(int dd, int mm, int yy): d(dd), m(mm), y(yy) { } Date:: Date(int dd, int mm, int yy) { d = dd; m = mm; y = yy; }  Defina a lista de inicialização na mesma ordem com que os membros foram declarados  Certifique-se que todos os membros da classe foram inicializados principalmente ponteiros

Destrutores  Devem liberar toda a memória que foi alocada no construtores  Caso não sejam implementados, o compilador irá fornecer um String::~String() { delete [] data; }

Sobrecarga de operadores  Permite que classes criadas pelo usuário sejam manipuladas de maneira convencional de acordo com uma notação conveniente. class Complex { double re, im; public: Complex(double, double i): re(r), im(i) {} Complex operator+(Complex); }; Complex a = Complex(1.3, 1.8); Complex b = Complex(1.3,2.0); Complex c; c = a + b;// c = a.operator+(b)

Operador de associação (=)  Se não implementado é fornecido pelo compilador Date d1(2,2,2002), d2; d2 = d1;  Forneça suas próprias versões do construtor de cópia e operador de associação se você tem ponteiros em suas classes class String { //... private: char* data_; public: String(char* s) {...} }; String a("Hello"), b("World"); b = a;

Operator =  Garanta que o valor de retorno seja uma referência a this Date& operator=(const Date rhs) {...; return *this;} Date d1, d2, d3; d1 = d2 = d3;// torna possível o encadeamento  Verifique a auto referência String& String::operator=(const String& rhs) { delete [] data; data = new char[strlen(rhs.data) + 1]; strcpy(data, rhs.data); return *this; } String a; a=a;

Operator =  Garanta que o valor de retorno seja uma referência a this Date& operator=(const Date rhs) {...; return *this;} Date d1, d2, d3; d1 = d2 = d3;// torna possível o encadeamento  Verifique a auto referência String& String::operator=(const String& rhs) { if (rhs == *this) return *this; delete [] data; data = new char[strlen(rhs.data) + 1]; strcpy(data, rhs.data); return *this; } String a; a=a;  Garanta que todos os membros da classe são associados

Forma canônica class Exemp { public: Exemp(); // construtor virtual ~Exemp(); // virtual se classe base protected: // Dados que meus filhos precisam private: // Meus dados pessoais Exemp (const Exemp& rhs) {} // construtor de copia Exemp& operator= (const Exempl& rhs) {}// atribuicao }

Funções amigas  A declaração normal de uma função em um classe garante logicamente que: 1. O método pode acessar as parte privadas da classe onde é declarado 2. O método existe no escopo da classe 3. O método deve ser invocado através de um objeto da classe  As funções estáticas eliminam a restrição 3 Date::set_default(1,1,2002);  As funções friends eleminam as restrições 3 e 2 class Date {... int d, m, y; public: friend Date tomorrow(const Date& today); } Date tomorrow(const Date& today) { Date res(today.d+1, today.m, today.y); return res; }

Classes amigas  Permitem que uma classe acesse as partes privadas de outra class CSquare; class CRectangle { int width, height; public: void convert (CSquare a); }; class CSquare { private: int side; public: friend class CRectangle; }; void CRectangle::convert (CSquare a) { width = a.side; height = a.side; }

Referências  Passagem de parâmetros e retorno por referência constante é mais eficiente e seguro Person returnPerson(Person p) { return p; } Person& returnPerson(const Person& p) { return p; }  No entanto, quando o valor de retorno é criado na função, não se pode retornar referência Complex& operator + ( const Compl& lhs, const Compl& rhs ) { Complex result ( lhs.real_ + rhs.real_, lhs.im_ + rhs.im_ ); return result; }

Classes Derivada  Classes represetam conceitos, classes derivadas expressam relacionamentos hierárquicos entre eles  Uma classe derivada de uma classe básica herda as propriedades da classe básica, podendo acrescentar ou especializar propriedades desta class Person {... }; class Student: public Person {... }; Empregado Gerente Polígono RetânguloQuadrado

Classes Derivadas  Classes derivadas publicamente, possuem acesso a todos os membros públicos e protegidos das classes básicas class Empregado { string nome, sobrenome; public: string nomeCompleto() const { return nome + ‘ ‘ + sobrenome; } }; class Gerente : public Empregado { int dep; public: void print() const { cout << “meu nome e: “ << nomeCompleto() << \n; } };  Podem acessar explicitamente métodos das classes básicas void Gerente::print() const { Empregado::print(); cout << “gerente”; }

Classes Derivadas  Construtores de classes derivadas não podem instanciar membros das classes básicas Empregado::Empregado(const string& n, const string& s): nome(n), sobrenome(s) {...} Gerente::Gerente(const string& n, const string& s, int d) : Empregado(n,s), dep(d) {...}  Objetos são construídos na seguinte ordem: classe base, os membros da classe, e a classe derivada  Objetos são destruídos na ordem inversa: a classe derivada, seus membros e a classe derivada  Construtores e operadores de associação não são herdados

Classes derivadas  Objetos de classes derivadas podem ser tratados como objetos de classes básicas quando manipulados através de ponteiros e referências vector rh; Empregado e1(“Luis”,”Azevedo”); Gerente g1(“Antonio”,”Camargo”,1); rh.push_back(&e1); rh.push_back(&e2);

Funções virtuais  Permitem a reimplementação de funções definidas na classe base pelas classes derivadas classe Empregado { public: virtual void print() const; } class Gerente : public Empregado { public: void print() const; } void f(const Empregado& emp) { emp.print(); }