Programação Orientada por Objectos - C++ jvo



Documentos relacionados
INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Linguagem de Programação III

Conceitos Básicos de C

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Componentes da linguagem C++

Introdução à Programação

Curso de Linguagem C

Programação Orientada a Objetos C++

Introdução a POO. Introdução a Linguagem C++ e POO

Engenharia de Software

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++.

Conceito de classe em C++

Tipos de Dados Simples

Capítulo 2: Introdução à Linguagem C

Programação em C++: Introdução

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento NetBeans Introdução à Linguagem de Programação JAVA

INF 1005 Programação I

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Introdução à Programação com Classes em C++

Computação e Programação Aula prática nº 5. Enunciados dos problemas

Linguagem C Tipos de Dados. void; escalares; sizeof Vectores; strings em C Estruturas Introdução ao pré-processador

Composição de classes

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

Aula 1. // exemplo1.cpp /* Incluímos a biblioteca C++ padrão de entrada e saída */ #include <iostream>

Manipulação de Arquivos

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À PROGRAMAÇÃO COM C/C++ Prof. Dr. Daniel Caetano

Orientação a Objetos

Esta apresentação ensinará os conceitos de Orientação a Objetos com C++, do mais básico para o mais avançado. É suposto que o aluno já tenha

Aula 1 Tipo Abstrato de Dados

Resumo da Matéria de Linguagem de Programação. Linguagem C

ITENS FUNDAMENTAIS. Profª Angélica da Silva Nunes

Programa ConsoleRPN. PUC-Rio CIV Sistemas Gráficos para Engenharia Luiz Fernando Martha & André Maués Brabo Pereira

Folha Prática 2. Lab. 2

Mestrado em Matemática Financeira

Olimpíadas de Informática

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Algoritmos e Programação Estruturada

Programação e Sistemas de Informação

O que é o JavaScript?

Resumo da Introdução de Prática de Programação com C. A Linguagem C

Programas simples em C

Programando em C++ Histórico da Linguagem C

3 Classes e instanciação de objectos (em Java)

INF 1005 Programação I

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento Eclipse Introdução à Linguagem de Programação JAVA

Conceitos básicos de programação

AMBIENTE DE PROGRAMAÇÃO PYTHON

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Pilhas. Profa Morganna Diniz

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Conceitos de Linguagens de Programação

Identificação das variáveis de entrada; resultados/variáveis de saída e método ou solução. (procedimentos e funções)

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

Introdução a C Tipos de Dados Variáveis Operadores

AULA Uma linguagem de programação orientada a objetos

Aula 06 - Funções. O que é uma Função - Comando return - Protótipos de Funções - Tipos de Funções - Escopo de Variáveis - Passagem de parâmetros

AULA 2: INTRODUÇÃO A LINGUAGEM DE C. Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme

Algoritmos e Programação

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza.

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

MC-102 Aula 19 Registros

20 Caracteres - Tipo char

O que é um algoritmo? O que é um programa? Algoritmos. Programas. Aula 1 Tipo Abstrato de Dados

Estrutura de Dados Básica

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

Laboratório de Arquitectura de Computadores IST - Taguspark 2008/2009 Introdução aos sistemas binários Guião 1 9 a 13 de Março 2009

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

Tarefa Orientada 16 Vistas

Resolução de problemas e desenvolvimento de algoritmos

17 - Funções e Procedimentos em C Programação Modular

Aspectos técnicos do desenvolvimento baseado em componentes

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

ESCOLA SUPERIOR DE TECNOLOGIA DE TOMAR DEPARTAMENTO DE ENGENHARIA INFORMÁTICA 2005/ Valores

Algoritmos e Técnicas de

Noções sobre Objetos e Classes

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

DEPARTAMENTO DE ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA DA UNIVERSIDADE DE COIMBRA

INFORMÁTICA APLICADA AULA 02 LINGUAGEM DE PROGRAMAÇÃO C++

5 Apresentando a linguagem C

Java. Marcio de Carvalho Victorino

Linguagem e Técnicas de Programação I Programação estruturada e fundamentos da linguagem C

Guia e Utilização do Visual Studio 6.0

Linguagens de. Aula 02. Profa Cristiane Koehler

Do C ao C++: O C++ é um C melhor, bem vindo ao C++.

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Transcrição:

Aula 16 C++ Breve perspectiva histórica Diferenças entre o C++ e o C Generalidade sobre a programação em C++ Primeiros programas: entradas e saídas Breve perspectiva histórica O C++ é uma extensão do C que, tal como o Smalltalk, é inspirado na noção de classe do Simula67. Para além disso, sobre as influências de outras linguagens de programação como o Algol68, de onde adopta a liberdade de fazer uma declaração onde está uma instrução; do ADA, dos tipos de dados abstracto e da genericidade; do Clu dos módulos parametrizados. E já agora, pode-se dizer que é também directamente influênciado pela avó, a linguagem BCPL, mãe da linguagem C, de onde recupera os caracteres '//' para denotar comentários. O C++ foi desenvolvido por Bjarne Stroustrup no início da década de 80 nos AT&T Labs. Inicialmente o C++ foi designado por C with classes. O nome C++ foi dado por Rick Mascitti no Verão de 1983. Os conhecedores de C poderão achar que C++ é inferior a ++C veja nas aulas seguintes por que. A linguagem não é chamada D porque se trata de uma extensão de C e não de uma nova linguagem que tenta remediar os defeitos da sua antecessora eliminando-lhe características. De facto, o C mantém-se como subconjunto do C++. A linguagem de programação C surge nos Laboratórios Bell no início da década de 70 e tem sofrido várias evoluções, algumas das quais influenciadas pelos desenvolvimentos do C++. O C++ foi instalado pela primeira vez fora do laboratório onde foi desenvolvido em Julho de 1983, tendo surgido comercialmente pela primeira vez em 1985. O C++ tem como principal objectivo manter-se simultaneamente próximo da máquina e próximo (da análise) do problema. Sendo uma linguagem que suporta programação http://w3.ualg.pt/~/poo POO 2002/2003 T16-1/10

Programação Orientada por Objectos - C++ orientada por objectos, o C++ pretende ser adequado à organização e desenvolvimento de programas de grande dimensão. Algumas Diferenças entre o C++ e o C A diferença conceptual entre o C++ e o C está na ênfase com que são tratados os tipos de dados e a organização dos programas. O Stroustrup diz ter pensado o C++ para: 1) Proporcionar um melhor C; 2) Suportar abstracção de dados; 3) Suportar Programação Orientada por Objectos. Isto é feito sem perda nem de generaliade nem de eficiência comparativamente ao C. Ao contrário de certas linguagens como o Smalltalk ou o Lisp, o C++ não impõe nenhum tipo de programação. Para além disso, o C++: Suporta programação orientada por objectos (Classes e Objectos, Herança, Binding dinâmico, polimorfismo); Suporta tipos de dados abstractos (classes, encapsulamento); Suporta funções e classes parametrizadas ou genéricas (templates). Disponibiliza operadores para alocação e libertação de dinâmica de memória de alto-nível (new, delete); Permite a passagem de argumentos por referência; Sobrecarga de funções e operadores; Expansão in-line de funções http://w3.ualg.pt/~/poo POO 2002/2003 T16-2/10

Mais diferenças Praticamente todas as instruções e expressões em C são válidas em C++, sem alteração de significado; Algumas das palavras-chave adicionadas pelo C++: catch inline protected throw class new public try delete operator template typename friend private this virtual sizeof( a ) == sizeof(int) /*em C */ sizeof( a ) == sizeof(char) // em C++ O nome de uma classe, estrutura, união ou enumeração é um tipo; Um ponteiro para uma função poderá ter como valor void*; Uma declaração dentro de um bloco é uma expressão; As uniões podem ser anónimas; Existem mecanismos para manipulação de excepções; Uma lista de argumentos vazia, significa que a função não tem argumentos; Em ANSI C isso é indicado pela palavra-chave void, que continua a ser aceite em C++. Pode ser usada aritmética com precisão simples para expressões do tipo real (float); http://w3.ualg.pt/~/poo POO 2002/2003 T16-3/10

Em ANSI C, uma var. global pode ser declarada várias vezes (extern); em C++ só pode ser definida uma única vez. Generalidades sobre a programação em C++ Pré-processador O C++ utiliza as directivas do pré-processador definidas pelo ANSI C. De um modo geral, o C++ depende muito menos do pré-processador do que o C. Podemos recomendar desde já que a utilização do pré-processador seja apenas para compilação condicional e inclusão de ficheiros de cabeçalho. Comentários /* Utilizados em C; válidos em C++ */ // Utilizados em C++; Comenta até ao fim da linha. Identificadores Em C++ não existe um limite máximo para o comprimento de um nome (ou identificador). Um identificador é normalmente escrito em minúsculas. Tal como na generalidade das linguagens, um identificador deve funcionar como mnemónica, i.e., deve dar uma indicação do seu conteúdo. Para separar palavras num identificador, utiliza-se _ ou escreve-se em Maiúsculas a primeira letra de cada nova palavra. Exemplos: isempty /* convenção habitual em C */ is_empty // Notação C++ isempty // como em Smalltalk http://w3.ualg.pt/~/poo POO 2002/2003 T16-4/10

Primeiros programas: entradas e saídas Tal como em C, para escrever e ler valores, usa-se aquilo a que se chama canais de entrada e saída (streams). O C++ disponibiliza operadores de alto nível para I/O (entrada/saída). O canal de saída para o ecrã (o standard output) é chamado cout. O canal de entrada de dados (o standard input) é chamado cin. Para além destes, existe ainda o (standard error) identificador por cerr. Todos este canais estão declarados no ficheiro iostream.h Para efectuar uma operação de entrada usa-se o operador extractor >>. Para efectuar uma saída usa-se o operador insersor <<. Exemplo: # include <iostream> using namespace std; int main() { int i = 1; cout << Frase seguida de inteiro: << i << nova linha << endl; cout << Insira um caracter: ; char c; cin >> c; cout << O caractere inserido é: << c; O que será que este código faz? http://w3.ualg.pt/~/poo POO 2002/2003 T16-5/10

Acesso a ficheiros O acesso a ficheiro pode também ser feito recorrendo a canais, que estão declarados no ficheiro fstream.h. Exemplo de utilização: # include < fstream.h > void f() { ofstream os; os.open( escrever.txt ); os << Texto ; os.close ( ); ; // canal para escrita Referências e passagem de argumentos por referência Uma referência pode ser vista como um pseudónimo ( alias ) da variável com que foi inicializada. Uma referência tem que ser obrigatoriamente inicializada com um nome de uma variável. Uma vez inicializada, não é possível alterar a variável referenciada. Todas as operações aplicadas a uma referência actuam sobre a variável referenciada. Exemplos: char c; int *pi, ii, i = 10; int &ri = i; int &ri2; /* Erro: referênci inicializada.*/ int &ri3 = 10; /* Erro: 10 é uma constante. */ int &ri4= i + ii; /* Erro: ma variável */ int &ri5 = c; /* Erro: tipos diferentes */ ri += 2; /* Adiciona 2 a i */ pi = &ri; (*pi == i && pi == &i) /* Sempre verdade */ Passagem de argumentos por valor (ou por cópia) Por omissão, o C e o C++ utilizam passagem de argumentos a funções por valor. Isto significa que primeiro os valores dos argumentos são calculados, depois os valores obtidos são copiados para os parâmetros da função. A alteração do valor dos parâmetros não se reflecte nos argumentos. http://w3.ualg.pt/~/poo POO 2002/2003 T16-6/10

Passagem de argumentos por referência Como motivação para o mecanismo de passagem de argumentos por referência, vamos escrever um programa que troque o valor de duas variáveis inteiras. Temos duas abordagens: i) Abordagem à C usando ponteiros e ii) Abordagem à C++ usando passagem de argumentos por referência. Estas duas abordagens são apresentadas a seguir. /* Abordagem C */ #include < stdio.h > void swap (int*, int*); main( ) { int i=1, j=2; swap (&i, &j); printf ( i: %d j: %d \n, i, j); ; void swap (int* x, int* y) { int tmp; tmp = *x; *x = *y; *y = tmp; // Abordagem C++ #include < iostream.h > void swap ( int&, int& ); main( ) { int i=1, j=2; swap ( i, j ); cout << i: << i ; cout << j: << j << endl; ; void swap (int &x, int &y) { int tmp; tmp = x; x = y; y = tmp; Note-se que se tivéssemos escrito simplesmente void swap (int x, int y) { int tmp; tmp = x; x = y; y = tmp ; os parâmetros mudavam de valor dentro da função, mas as variáveis não. Este é o comportamento da passagem de argumentos por valor. http://w3.ualg.pt/~/poo POO 2002/2003 T16-7/10

Quando usamos passagem de argumentos por referência (abordagem C++): 1. Os parâmetros x e y tornam-se sinónimos (referências) de variáveis i e j, respectivamente. Não é feita a cópia dos valores de i e j para x e y, respectivamente; os parâmetros x, y passam a referir-se às mesmas posições de memória onde estão guardadas as variáveis argumento; 2. Quando a função termina, as referências x e y são destruídas, permanecendo trocado o valor das variáveis argumento (i e j). Uma vantagem óbvia da passagem de argumentos por referência é a legibilidade. Por defeito, o valor retornado por uma função é também passado por valor. É também possível retornar referências (ou ponteiros). Aqui podem surgir alguns problemas: 1) O valor retornado é um l-value, pelo que qualquer modificação altera o objecto retornado; Para prevenir modificações não pretendidas, podemos usar referências constantes; 2) Podemos estar a retornar uma referência para um objecto local; Exemplo: int& f ( int &a ){ // f( int a) seria erro porque estaria a retornar uma referência // de uma variável local a++; return (a); // seria erro return &a; o tipo retor concorda com o // tipo de retorno da funç. int main ( ){ int i = 1; cout << i; http://w3.ualg.pt/~/poo POO 2002/2003 T16-8/10

; cout << << f( i ) << endl; f( i )++; cout << i; O resultado seria deste programa seria: 1 2 4 Referências constantes Se quisermos passar argumentos por referência e quisermos garantir que a variável passada como argumento não é alterada pela função podemos usar referências constantes. Exemplo: const int& g(const int& a ){ cout << a; // outras operações return (a); lterem a int main ( ){ int i = 1; f ( i ); //ok g ( i ); //ok f ( 2 ); //erro: precisa de um l-value: g ( 2 ); //ok ; As referências constantes permitem passar qualquer constante como argumento; o que não é possível no caso de referências não constantes. http://w3.ualg.pt/~/poo POO 2002/2003 T16-9/10

Podemos também declarar referências de ponteiros. Exemplo: função que troca dois ponteiros: void pointers_swap ( int *&v1, int *&v2) { int *tmp = v2; v2 = v1, v1 = tmp; int *&v; lê-se da direita para a esquerda, i.e., trata-se de uma referência para um ponteiro de uma variável de tipo inteiro. int main ( ){ int i = 10; int j = 20; int *pi = & i; int *pj = & j; cout << *pi << *pj << \n pointers_swap ( pi, pj ) cout << *pi << *pj << \n 10 20 20 10 Referências recomendadas para aprofundar os assuntos tratados: [1] Caleb Drake, Object-Oriented Programming with C++ and Smalltalk, Prentice Hall, Upper Saddle River, NJ, 1998. [2] S. Lippman, J. Lajoie, C++ Primer (3rd edition), Addison-Wesley, 1998. [3] B. Stroustrup, The C++ Programming Language (3rd edition) Addison- Wesley, 1997. http://w3.ualg.pt/~/poo POO 2002/2003 T16-10/10