Aplicação dos conceitos de programação orientada a objeto em linguagens de alto nível

Documentos relacionados
Introdução a UML. Exercício:

Componentes da linguagem C++

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

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

INF 1005 Programação I

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

INF 1005 Programação I

Introdução à Programação

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

JSP - ORIENTADO A OBJETOS

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

Exercício 1. Tabela 1: Cadastro de usuários, senhas e privilégios (exemplo). Login Senha Privilégio Armamento

INTRODUÇÃO À LINGUAGEM C++

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

Conceitos de Linguagens de Programação

Tipos de Dados Simples

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C / C++

Orientação a Objetos

system("pause"); //Envia comando para o sistema operacional solicitando parada de execução do programa } //limitador do corpo do programa

Algoritmos e Programação Estruturada

Curso de Linguagem C

1 Resumo: Strings e vetores de caracteres. Departamento de Ciência da Computação IME/USP

Estrutura de Dados Básica

MC-102 Aula 17 Strings e Matrizes

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

20 Caracteres - Tipo char

Aula 1 Tipo Abstrato de Dados

INF 1620 P1-10/04/02 Questão 1 Nome:

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

Técnicas de Programação I

Manipulação de Arquivos

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

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos

Introdução a Computação

INTRODUÇÃO À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E AULA TEÓRICA 4 PROF. MARCELO LUIZ SILVA (R E D)

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

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

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

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

Pilhas. Profa Morganna Diniz

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

Introdução à Programação Bacharelado em Sistemas de Informação 3ª Lista de Exercícios - Solução Procedimentos e Funções

IFTO LÓGICA DE PROGRAMAÇÃO AULA 01

Prof. Esp. Adriano Carvalho

Linguagem de Programação

Introdução à Programação. Armazenamento de Grande Quantidade de Informação Usando Vetores

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

Conceitos básicos da linguagem C

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

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

Conceitos Básicos de C

Exercício de Revisão Linguagem C

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

13 Números Reais - Tipo float

1. PROLOGO ==========

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org

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

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

Computação II Orientação a Objetos

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

2ª LISTA DE EXERCÍCIOS CLASSES E JAVA Disciplina: PC-II. public double getgeracaoatual() {return geracaoatual;}

5 Apresentando a linguagem C

Programação 1. Rafael Vargas Mesquita. ftp://ftp.ci.ifes.edu.br/informatica/rafael/

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C

INTRODUÇÃO AO JAVA PARA PROGRAMADORES C

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

Linguagem de Programação I

Curso de Programação Computadores

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo

Linguagens de Programação I

3. INTRODUÇÃO À LINGUAGEM C 3.1. CONCEITOS BÁSICOS. Lógica de Programação

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

Modelagem e Implementação (Incremental de um Software para Controle) de Aquário de Peixes

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

Estrutura de um programa em linguagem C

Registros. Técnicas de Programação. Rafael Silva Guimarães

Fundamentos de Programação II. Introdução à linguagem de programação C++

Curso de C para Engenharias

UFSM Introdução ao Dev-C++ Profa. Patrícia Pitthan. Introdução ao Dev-C++

Linguagem e Técnicas de Programação I Operadores, expressões e funções. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

DEFINIÇÃO DE MÉTODOS

15 a Aula Subprogramação /Subalgoritmos Função e Procedimento

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

Programação científica C++

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

Olimpíadas de Informática

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

O Excel é um programa de computador desenvolvido para gerenciar dados na forma de planilhas.

Estruturas de entrada e saída

Estruturas de Repetição

Linguagem C: variáveis, operadores, entrada/saída. Prof. Críston Algoritmos e Programação

Exemplos. char c; int i=67;... c= A ; c=c+1; if (c== B )... c=i; i=c; i++; if (i>= C )...

Introdução a Java. Hélder Nunes

José Romildo Malaquias

Transcrição:

95

Aplicação dos conceitos de programação orientada a objeto em linguagens de alto nível 96

Aplicação dos conceitos de programação orientada a objeto em linguagens de alto nível Nesta etapa estudaremos linguagens de programação de alto nível que suportam a programação orientada a objeto (OO). Dedicaremos nossa atenção a duas das mais populares linguagens de programação OO utilizadas atualmente, a linguagem C++ e a linguagem Java. Iniciaremos nossos estudos pela linguagem C++, devido ao nosso conhecimento prévio da linguagem C, o que tornará mais amigável nosso contato com C++. 97

Linguagem de Programação C++ 98

Linguagem de Programação C++ Breve histórico: Desenvolvida por Bjarne Stroustrup; Nos laboratórios Bell; No início dos anos 80; Criada para suportar a escrita de algumas simulações complexas, para as quais as considerações de eficiência tornaram impossível o uso da Simula67. 99

Linguagem de Programação C++ Características básicas: Extensão da linguagem C; Compatível com a linguagem C, preservando desta a integridade de numerosas bibliotecas e ferramentas; Acrescenta vários recursos às características de sua linguagem-mãe, sendo os mais importantes aqueles que suportam a abstração de dados e a programação orientada a objeto; Adotou do C os tipos básicos de dados, operações, sintaxe de instruções, e estrutura de programa; Linguagem híbrida. 100

Linguagem de Programação C++ Foi mencionado que a linguagem C++ é compatível com a linguagem C e que este foi o fator que influenciou na opção de começarmos nosso estudo das linguagens OO pela linguagem C++. Até que ponto são compatíveis? A melhor forma de respondermos a esta pergunta é analisando alguns exemplos. Nosso primeiro programa exemplo em C++ enviará a mensagem Olah mundo! para o monitor. 101

Linguagem de Programação C++ #include <stdio.h> int main() { printf("olah mundo!\n"); return 0; } Este é o código fonte de um programa em C++? Sim. 102

Linguagem de Programação C++ Para enfatizarmos a compatibilidade analisaremos um segundo programa exemplo. Desta vez o programa receberá através da entrada padrão um valor inteiro pertencente ao intervalo [0,255] e a posição do bit que se deseja saber o valor, o programa escreverá na saída padrão o valor do bit solicitado. 103

104 Linguagem de Programação C++ #include <stdio.h> main () { unsigned char desloca, valor_byte, aux=1; printf("\ndigite um numero pertencente ao intervalo "); printf("[0,255]: "); scanf("%d", &valor_byte); printf("\ndigite o bit a testar(0 a 7): "); scanf("%d", &desloca); aux = aux << desloca; valor_byte = valor_byte & aux; valor_byte = valor_byte >> desloca; printf( \no valor do bit eh %d",valor_byte); return 0; }

Linguagem de Programação C++ Isso significa que não há diferença entre um código em C++ e em C? Existe sim diferença entre os códigos, se o programador se utilizar das características particulares da linguagem C++. Uma grande diferença entre as linguagens C e C++ e o fato de C++ possibilitar ao programador a criação de novos tipos de dados representados por classes, tipos estes que possibilitam ao programador trabalhar com todos os princípios da OO. Antes de tratarmos dos aspectos OO da linguagem, vamos analisar outras diferenças entre as linguagens. 105

106 Linguagem de Programação C++ Existem diferenças sutis como: - em C++ podemos usar // para definirmos um comentário de fim de linha; - em C++ variáveis podem ser declaradas em praticamente qualquer ponto do programa. Porém, vamos analisar agora a forma particular com que C++ trata a entrada e saída de dados utilizando periféricos padrões. Esta forma é denominada entrada e saída por fluxo e trata-se de um recurso orientado a objeto mais elaborado. Porém, mais prático que o utilizado na linguagem C.

Linguagem de Programação C++ Para tal trabalharemos com os operadores de inserção de fluxo (<<) e extração de fluxo (>>). Tais operadores estão disponíveis na biblioteca iostream.h. O objeto de fluxo de saída padrão é denominado cout (da classe ostream, para saída) e normalmente é conectado à tela; O objeto de fluxo de entrada padrão é denominado cin (da classe istream, para leitura) e normalmente é conectado ao teclado; O objeto de fluxo de erro padrão é denominado cerr (canal alternativo de saída para mensagens de erro). Veremos agora um exemplo da utilização da entrada e saída por fluxo. 107

Linguagem de Programação C++ #include <iostream.h> int main() { float preco; int n; std::cout << "Entre com o preco:\n"; std::cin >> preco; std::cout << "Numero de itens:\n"; std::cin >> n; std::cout << "\ntotal = "; std::cout << n*preco; return 0; } 108

Linguagem de Programação C++ O std:: é colocado antes de cout e cin, pois é necessário quando utilizam-se nomes trazidos no programa pela diretiva de pré-processador #include<iostream.h>. As notações std::cout e std::cin especificam que estamos utilizando nomes, nesse caso, cout e cin, que pertence ao namespace std. Os nome cerr também pertence ao namespace std. Os namespaces são um recurso avançado do C++.[3] A declaração using permite omitir std:: antes de cada uso de um nome no namespace std. Sua utilização se dá da seguinte forma: 109

110 #include <iostream.h> using std::cout; using std::cin; int main() { float preco; int n; cout << "Entre com o preco:\n"; cin >> preco; cout << "Numero de itens:\n"; cin >> n; cout << "\ntotal = "; cout << n*preco; return 0; }

111 Linguagem de Programação C++ Os operadores de inserção e extração de fluxo pode ser colocado em cascata, o que também denomina-se como inserção de fluxo de concatenação e encadeamento. Por exemplo, no substituir as linhas: programa anterior podemos cout << "\ntotal = "; cout << n*preco; Pela linha cout << "\ntotal = "<< n*preco; Note que a instrução acima gera saída de múltiplos valores de diferentes tipos. A seqüência de escape \n pode ser substituída por std::endl. Neste caso, std:: também pode ser suprimido através da utilização de using. endl é denominado manipulador de fluxo, gerando a saída de um caractere de nova linha e depois, esvaziando o buffer de saída.

Linguagem de Programação C++ Exercício: Com base no que foi estudado informe qual será a saída no monitor gerada pelo seguinte programa: #include <iostream.h> using std::cout; using std::cin; using std::endl; int main() { float multiplicando, multiplicador; cout << "Entre com o o multiplicando e o multiplicador: "; cin >> multiplicando >> multiplicador; cout << endl << "Resultado: " << multiplicando * multiplicador; return 0; } //defina a(s) entrada(s) necessária(s) 112

Linguagem de Programação C++ Alunos atentos devem ter se perguntado: Se a entrada e saída por fluxo é mais elaborada que os antigos printf() e scanf(), deve existir uma maneira de determinar o número de colunas que serão reservadas para a exibição de um determinado valor, de determinar a precisão de valores em ponto flutuante e a base dos valores? Existe. Estas e outras formatações são possíveis devido a outras funções e objetos predefinidos associados com streams (entrada e saída por fluxos) são os chamados manipuladores de E/S, da classe ios (biblioteca iomanip.h). 113

Linguagem de Programação C++ Este são: setw (int n) tamanho do campo setprecision (int n) precisão do campo de ponto flutuante setiosflags (long int f) define ajuste de campo resetiosflags (long int f) cancela ajustes de campo std::dec, std::hex, std::oct definem a base dos valores 114

Linguagem de Programação C++ Alguns ajustes de campo disponíveis para setiosflags: ios::left campos ajustados à esquerda dentro da largura de campo setw() ios::right campos ajustados à direita dentro da ios::scientific largura de campo setw() formatação em notação científica ios::showpoint mostra os zeros à direita, quando necessário por questões de precisão 115

116 Para melhor fixarmos o que foi visto, vamos imaginar a situação hipotética em que deseja-se valores decimais impressos em hexadecimal, ajustados à esquerda, em campos de largura 10: #include <iostream.h> #include <iomanip.h>... int num = 44; Linguagem de Programação C++ cout << setw(10) << setiosflags(ios::left) << std::hex << num << num+1 << endl; A saída em tela gerada será: 2c 2d 12345678901234567890 colunas

Linguagem de Programação C++ Exercício: Com base no que foi visto, determine o que será exibido na saída padrão devido à execução do programa a seguir: 117

118 #include <iostream.h> #include <iomanip.h> using std::cout; using std::cin; main() { cout<<' '<<setw(15)<<setiosflags(ios::left)<<"teste"; cout<<' '<<resetiosflags(ios::left)<<setw(5); cout<<setprecision(2)<<setiosflags(ios::showpoint); cout<<3.0<<' '<<resetiosflags(ios::showpoint); cout<<setw(10)<<setiosflags(ios::left)<<setprecision(4); cout<<28.37<<' '<<setw(20)<<resetiosflags(ios::left); cout<<"funcionou"<<' '; return (0); }

Linguagem de Programação C++ Seqüência apresentada no monitor: teste 3.0 28.37 funcionou 15 5 10 20 119

Exercício: Linguagem de Programação C++ 120 Creio que algumas perguntas devem ter surgido nas mentes de vocês, como: - ao definir a largura de um campo com o manipulador de fluxo setw() esta configuração perdurará até que eu efetue uma nova manipulação com setw()? - ao setar a precisão de um número em ponto flutuante esta configuração perdura até que eu efetue uma nova manipulação do fluxo? - ao definir uma nova base de numeração esta definição se manterá até que haja uma nova definição? -... Efetue testes e responda estas e outras perguntas. Obs.: Em nosso estudo não foram esgotadas as possibilidades de manipulação de fluxo!

Linguagem de Programação C++ Vamos nos recordar agora do que acontece se o programa a seguir receber como entrada a string Software Orientado a Objeto : #include <stdio.h> main() { char frase[30]; scanf("%s", frase); printf("%s", frase); return (0); } 121

122 Linguagem de Programação C++ O mesmo acontece com o programa a seguir escrito em C++: #include <iostream.h> using std::cout; using std::cin; int main() { } char frase[30]; cin >> frase; cout << frase; return 0;

Linguagem de Programação C++ Para não pararmos a leitura da string ao ser encontrado um espaço utilizávamos, na linguagem C, o gets(). No C++ utilizaremos os métodos do objeto cin: get (char* cp, int tam[, char final]) lê um vetor de até tam-1 elementos, terminando com o caractere final, ou se este não for especificado, com <enter>. getline variante do get, que elimina o caractere de terminação. 123

124 Linguagem de Programação C++ Exemplo anterior com o método getline(): #include <iostream.h> using std::cout; using std::cin; int main() { } char frase[30]; cin.getline (frase, 30); cout << frase; return 0;

Linguagem de Programação C++ Entretanto devemos ter em mente que a entrada e saída de dados por fluxo é fortemente tipada, ou seja, para se saber de que forma será feita a operação (E/S) é feita uma análise do tipo do operando. Sendo assim, é possível imprimir o caractere correspondente a um inteiro? Sim, estas e outras operações são possíveis. Para tal analisaremos o programa a seguir que se utiliza das funções-membros (dos métodos) get e put. 125

126 Linguagem de Programação C++ #include <iostream.h> using std::cin; using std::cout; using std::endl; int main() { int caractere; cout << "Forneca uma sequencia de simbolos qualquer: " << endl; while ((caractere = cin.get())!= '\n') cout.put(caractere); cout << endl << Inteiro correspondente a '\n': " << caractere << endl; return 0; } //a função get sem argumentos extrai um caractere a partir do fluxo designado (incluindo caracteres não gráficos) e o retorna como o valor da chamada da função.

Linguagem de Programação C++ Uma outra peculiaridade da linguagem C++ é a forma como esta trata a passagem de parâmetro por valor e por referência. Para nos recordamos de como este processo ocorria na linguagem C analisaremos o programa a seguir que possui uma função responsável por fazer a troca de valores entre duas variáveis. 127

128 #include <stdio.h> void Swap (int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } main () { int num1, num2; printf( \nentre com um valor inteiro para A: ); scanf ( %d, &num1); printf( \nentre com um valor inteiro para B: ); scanf ( %d, &num2); Swap (&num1, &num2); printf ( \na agora vale %d e B vale %d\n, num1, num2); return 0; }

Linguagem de Programação C++ O programa com a mesma finalidade escrito na linguagem C++ ficará: 129 #include <iostream.h> using std::cin; using std::cout; void Swap (int &a, int &b) { int temp; temp=a; a=b; b=temp; } main () { int num1,num2; cout << "Entre com um valor inteiro para A: "; cin >> num1; cout << "Entre com um valor inteiro para B: "; cin >> num2; Swap (num1, num2); cout << "A agora vale " << num1 << " e B vale " << num2; return 0; }

130 Linguagem de Programação C++ Outra singularidade da linguagem C++ é a forma como esta possibilita ao programador manipular a alocação dinâmica de memória. Para o gerenciamento dinâmico de memória é disponibilizado o operador new que recebe um tipo de dado e aloca memória para um ou n elementos do tipo recebido e retorna o endereço de memória da área alocada. Sua sintaxe é a seguinte:... TipoDeDado *p; p = new TipoDeDado [tamanho]; /* A especificação do tamanho é opcional e sua ausência implica na alocação de área suficiente para armazenar apenas um elemento do tipo especificado.*/

131 Linguagem de Programação C++ Para uma melhor compreensão, analisaremos o programa a seguir que, lê da entrada padrão o número de linhas e de colunas de uma matriz de números em ponto flutuante, aloca espaço dinamicamente para esta e a inicializa, com valores fornecidos pelo usuário, através da entrada padrão. Ao final o programa retorna a matriz na saída padrão com layout apropriado. #include <iostream.h> #include <iomanip.h> using std::cin; using std::cout; using std::endl; int main () { int i,j,cont; float *matriz; cout << "Entre com o numero de linhas da matriz: "; cin >> i;

} 132 cout << "Entre com o numero de colunas da matriz: "; cin >> j; matriz = new float [i*j]; if (!matriz) { cout << endl << "ERRO!" << endl; exit (1); } for (cont=0; cont<i*j; cont++) { cout << endl << "Entre com o elemento da matriz [" << cont/j+1 << "," << cont%j+1 << "]: "; cin >> matriz[cont]; } for (cont=0; cont<i*j; cont++) if (!(cont%j)) cout << " " << setw(7) << setprecision (2) << setiosflags (ios::showpoint) << matriz[cont]; else if (cont%j==j-1) cout << setw(7) << matriz[cont] << " " << endl; else cout << setw(7) << matriz[cont]; return 0;

133 Quando se trata de alocação dinâmica de memória, uma operação que torna-se essencial, além da reserva de áreas da memória, é a liberação de áreas reservadas que não serão mais utilizadas. O operador delete possibilita a liberação de áreas alocadas, permitindo assim a reutilização das mesmas. Exemplo:... Linguagem de Programação C++ char *p_c, *vetor; p_c = new char; vetor = new char [10]; delete p_c; delete []vetor; /* Se usar apenas delete vetor, apenas o primeiro elemento do vetor será desalocado. */

Exercício: Linguagem de Programação C++ Com base no que vimos, construa um programa, na linguagem C++, que aloque dinamicamente memória para um vetor de strings. O processamento se dará da seguinte forma: o usuário fornecerá através da entrada padrão um conjunto de strings com tamanhos aleatórios. O final de uma string é identificado pelo pressionamento da tecla enter e o final do conjunto de strings é identificado pelo fornecimento de uma string vazia pelo usuário. Ao final do processamento o programa deve retornar na saída padrão as strings contidas no vetor. 134 213