Introdução à Programação com

Ada 95

Edição Especial com o Software Ada+SQL 

(Comandos básicos de SQL podem ser executados de forma interativa ou ainda como parte de programas seqüênciais e concorrentes)

Arthur Vargas Lopes, PhD

Para adquirir contate a Editora da ULBRA

(Preço promocional de R$ 29,00 incluindo software e despesas postais dentro do território brasileiro)

Também a venda nas Livrarias SULINA

 

Agradecimentos

Aos meus filhos Gabriel e Melissa.

Prefácio

A programação é uma nova arte onde o artista é o programador. Este novo tipo de artista não apenas utiliza instrumentos conhecidos para realizar seu trabalho mas principalmente desenvolve e implementa novos instrumentos. Para o programador os recursos de software e hardware são os seus instrumentos de trabalho que tem sua base em uma linguagem de programação e suas abstrações pré-definidas. Estes recursos quando bem utilizados tornam-se um instrumento dinâmico onde o desenvolvimento e a implementação de novos recursos é limitada apenas pela capacidade técnica e criativa do programador. Não é então de surpreender que a programação de computadores está sendo considerada como uma das atividades, realizadas pelo ser humano, mais sofisticadas e complexas da atualidade para não dizer a mais complexa. Esta afirmação tem sido comprovada por grupos que estudam vários aspectos da programação. De fato, estudos e publicações sérias vem afirmando que para um programador atingir o grau de especialista são necessários dez anos de intenso estudo e prática. A competência entretanto pode ser atingida a partir de quatro anos de preparação adequada onde a prática deve ser enfatizada [Winslow, 1996].

Este livro tem o objetivo de somar esforços junto aqueles que se dedicam ao ensino básico da Ciência da Computação. De acordo com o "Computing Science Acreditation Board", dos USA, a Ciência da Computação "... é a disciplina que envolve o avanço do entendimento fundamental de algoritmos e sistemas de informação em geral assim como os aspectos práticos do projeto de software e hardware eficiente e seguro de forma a satisfazer requisitos ...".

A linguagem na qual os programas são demonstrados é a Ada 95. A razão desta escolha fundamenta-se na natureza desta linguagem: poderosa, moderna e coerente com os objetivos de uma programação séria e responsável. Não é de se admirar que esta linguagem está fortemente associada com a engenharia de software. Ada 95 induz à confecção de programas de qualidade onde a ênfase está na correção, robustez, disciplina e manutenbilidade. Seu uso resulta em uma redução substancial de custos de desenvolvimento e manutenção com um aumento de produtividade. Para aqueles com grandes investimentos em outras linguagens Ada 95 disponibiliza interfaces com C, FORTRAN e COBOL. Este livro irá beneficiar o estudante de inúmeras formas onde talvez a mais importante esteja no entendimento e prática de técnicas que permitem a construção de software de qualidade onde o estudo e a prática com tipos abstratos de dados é de fundamental importância para implementação do re-uso de software, para a programação de grandes projetos e sistemas críticos em especial. Os sistemas críticos são caracterizados por não poder falhar em decorrência dos danos catastróficos associados.

O capítulo 1 introduz o estudo das componentes básicas de computador, sumarizando sua história e características das três primeiras gerações até chegar aos computadores atuais.

O capítulo 2 apresenta os elementos básicos para a construção de programas discutindo os conceitos e aplicações dos algoritmos, fluxogramas e da codificação. São discutidos três algoritmos para solução de problemas distintos. Ao final deste capítulo é apresentado o histórico do desenvolvimento da linguagem Ada.

O capítulo 3 analisa a anatomia de alguns programas simples analisando a os aspectos básicos de um conjunto de programas envolvendo seus aspectos léxicos, sintáticos e semânticos assim como também da sua documentação. A partir deste capítulo são incluídas dicas de programação. As dicas de programação visam reforçar critérios para codificação de programas com maior qualidade e também clarificar fatores operacionais envolvendo, por exemplo, a compilação de diversas unidades de compilação dispostas em um conjunto de arquivos.

O capítulo 4 inicia o estudo propriamente dito da programação onde os três algoritmos discutidos no capítulo dois são transformados em programas Ada 95. A medida que cada programa é discutido novas construções da linguagem são analisadas. Estas construções envolvem os literais, packages, instanciamento de packages genéricos e cláusulas de contexto. São também estudados os comandos de atribuição, chamada de sub-programa, e de iteração. Este capítulo demonstra a codificação de um programa a partir de um algoritmo.

O capítulo 5 apresenta e discute os principais tipos de dados e operadores pré-definidos da linguagem. São também estudados os comandos if, goto e as expressões.

O capítulo 6 discute a programação de coleções de objetos. Os arrays são discutidos através de diversos exemplos. Um grupo de atributos também é discutido juntamente com o comando iterativo for.

O capítulo 7 apresenta a construção de novos tipos de dados e sua relação com os tipos de dados abstratos discutindo também os tipos enumeráveis, para arrays e para registros. Outras estruturas estudadas são os agregados de array e registro e a cláusula use. Os comandos exit, case e loop são também estudados.

O capítulo 8 discute os sub-programas. Funções e procedimentos são estudados tendo em vista o encapsulamento de algoritmos e sub-algoritmos. O escopo, overloading e o trabalho com arquivos de texto são também estudados neste capítulo.

O capítulo 9 discute a programação orientada a objetos através da construção de packages e a utilização de tipos tagged. Packages são construídos tendo em vista a implementação de tipos de dados abstratos. Recursos para proteger a integridade de construções são também discutidos.

O capítulo 10 discute a utilização de exceptions apresentando as exceptions pré-definidas mais comuns, a declaração de novas exceptions e o acionamento e interceptação de exceptions.

O capítulo 11 introduz a programação concorrente apresentando os seus conceitos básicos e construções fundamentais para a programação de tasks assíncronas e síncronas.

Cada capítulo contém ao seu final um resumo dos principais assuntos abordados e uma série de exercícios. O resumo sumariza e reforça os assuntos tratados e a série de exercícios visa provocar e estimular a reflexão, teste e o entendimento prático destes assuntos. A partir do capítulo 3 cada resumo é precedido de um conjunto de dicas de programação.

O Anexo 1 apresenta a notação BNF. Esta notação é utilizada ao longo do livro, e em especial no Anexo 2, para apresentar as construções da linguagem.

O Anexo 2 apresenta o sumário da sintaxe da linguagem Ada 95 com exemplos. Esta sintaxe foi adaptada do Manual de Referência da Linguagem Ada 95 elaborado pela Intermetrics, Inc. Muitas destas construções sintáticas são representadas ao longo do livro.

O Anexo 3 apresenta a tabela ASCII com o código de cada símbolo exibido nas bases binária, octal, decimal e hexadecimal.

O Anexo 4 descreve os procedimentos para instalação do ambiente de programação Ada+SQL. Com este recurso você poderá testar todos os programas discutidos neste livro. Estes programas encontram-se armazenados no diretório <dir>\Examples\Livro-IA sendo que <dir> representa o nome do caminho ("path") onde o sistema Ada+SQL foi instalado. O Anexo 5 apresenta os packages pré-definidos implementados pelo sistema Ada+SQL.

Muitos termos e conceitos são explicados através de notas de rodapés. Estes termos e conceitos também constam do glossário apresentado ao final do livro.

 

 

Arthur Vargas Lopes

Janeiro de 1997

 

 

 

1. Introdução

1.1 O Computador

1.2 Hardware

Unidade Central de Processamento

Memória Principal

Unidade de Controle

Unidade Aritmética e Lógica

Periféricos

1.3 Software

Software Básico

Software Aplicativo

1.4 A História dos Computadores Digitais

1.5 As Gerações dos Computadores

A Primeira Geração

A Segunda Geração

A Terceira Geração

1.6 Os Computadores Atuais

Resumo

Exercícios

 

2. Elementos para a Construção de Programas

2.1 Algoritmos

Treinando a Elaboração de Algoritmos

Algoritmo 2.1 - Convertendo Graus Centígrados para Graus Kelvin

Algoritmo 2.2 - Tirando a Sorte com uma Moeda

Algoritmo 2.3 - Maior Divisor Comum (MDC)

O Teste de um Algoritmo

Elaboração de Algoritmos por Refinamentos Sucessivos

2.2 Fluxogramas

2.3 Codificação de Programas

2.4 A Construção de Programas

Algoritmo 2.4 - Construção de um Programas

2.5 A Linguagem Ada 95

Ada 83

Ada 9X

2.6 Ada na Internet

Ada Information Clearinghouse (AdaIC)

Public Ada Library (PAL)

Resumo

Exercícios

 

3. A Anatomia de Alguns Programas Simples

3.1 Palavras Reservadas

3.2 Identificadores

3.3 Separadores

3.4 Delimitadores

3.5 Caracteres Gráficos

3.6 Documentação

3.7 Comentários

3.8 Saída de Dados

Testando o Programa Terceiro_Programa

3.9 Literais String

3.10 Sintaxe

3.11 Unidades de Compilação

3.12 Semântica

3.13 Entrada e Saída de Dados

Testando o Programa Quarto_Programa

Mensagens para Entrada de Dados

3.14 Tipos de Dados

3.15 Declaração de Objetos

Dicas

Resumo

Exercícios

 

4. De Problemas para Programas

4.1 Convertendo Graus Centígrados para Graus Kelvin

4.2 O Comando de Atribuição

4.3 A Sintaxe de um Programa

Testando o Programa Quinto_Programa_1

Testando o Programa Quinto_Programa_2

4.4 Literal Numérico

4.5 Literal Decimal

4.6 Literal Based

4.7 Chamadas e Especificações de Sub-Programas

4.8 Package

4.9 Tirando a Sorte com uma Moeda

Testando o Programa Sorteia_Moeda

4.10 Instanciando um Package Genérico

4.11 Cláusulas de Contexto

4.12 Chamada de Funções

4.13 Biblioteca de Unidades de Programa

4.14 MDC - Maior Divisor Comum

Testando o Programa Maior_Divisor_Comun

4.15 Atributo Integer'Image

4.16 Concatenando Strings

4.17 Concatenando Caracteres

4.18 Literais Caractere

4.19 O Operador mod

4.20 Expressão Relacional

4.21 O Comando while

Passo de Inicialização

Passo de Modificação

Loop Infinito

Dicas

Resumo

Exercícios

 

5. Tipos de Dados Pré-Definidos

5.1 Tipo Integer

5.2 Operadores Relacionais para o Tipo Integer

5.3 Tipo Natural

5.4 Operadores Aritméticos para o Tipo Integer

5.5 Tipo Positive

5.6 Tipo Character

5.7 Operadores Relacionais para o Tipo Character

5.8 Tipo Boolean

5.9 Operadores Relacionais para o Tipo Boolean

5.10 Operadores Lógicos para o Tipo Boolean

5.11 Tipo String

5.12 Operadores Relacionais para o Tipo String

5.13 Tipo Float

5.14 Operadores Relacionais para o Tipo Float

5.15 Operadores Aritméticos para o Tipo Float

5.16 Conversões Entre Tipos Float e Integer

Testando o Programa Demonstra_Conversao

5.17 A Pragma List

5.18 O Comando if

Testando o Programa Comando_If

5.19 Encontrando Números Primos

Algoritmo 5.1 - Encontra números primos entre dois números

Testando o Programa Numeros_Primos

5.20 O Comando goto

5.21 Expressões

Testando o Programa Demonstra_Algumas_Expressoes

Prioridade dos Operadores

5.22 Operadores Relacionais Universais

5.23 Atributos Max e Min

Testando o Programa Mostra_Max_Min

Dicas

Resumo

Exercícios

 

6. Trabalhando com Coleções

Testando o Programa Requer_Array

Testando o Programa Array_Uma_Dimensao

6.1 Arrays

Vetores

Agregado de Array

Matrizes

6.3 O Atributo Range

6.4 O Atributo First

6.5 O Atributo Last

6.6 O Atributo Val

6.7 O Atributo Pos

6.8 Calculando o Número de Dias Entre Duas Datas

Algoritmo 6.1 - Calcula o número de dias entre duas datas

Testando o Programa Total_De_Dias_Entre_Duas_Datas

6.9 Aprimorando um Algoritmo

Algoritmo 6.2 - Calcula o número de dias entre duas datas - Forma Otimizada.

Testando o Programa Total_De_Dias_Entre_Duas_Datas2

6.10 O Comando for

A Opção reverse

Loops Aninhados

Dicas

Resumo

Exercícios

 

7. Novos Tipos de Dados

7.1 A Construção subtype

Testando o Programa Sub_Tipo_1

Testando o Programa Sub_Tipo_2

7.2 A Construção type

7.3 Tipos Enumeráveis

Testando o Programa Enumera_1

7.5 O Comando exit

Testando o Programa Exit_1

7.6 O Comando case

Testando o Programa Case_1

Testando o Programa Case_2

7.7 O Tipo array

7.8 Pesquisando a Existência de Nomes em Tabelas

Algoritmo 7.1 - Implementa a Pesquisa Seqüencial em Tabelas

Testando o Programa Pesquisa_1

7.9 Agregado de array

7.10 O Comando loop

7.11 Tipos para Registros

7.12 Pesquisando o Saldo de Uma Conta

Testando o Programa Pesquisa_2

7.13 A Cláusula use

7.14 Agregado de Registros

7.15 Os Atributos Pred e Succ

Testando o Programa Pred_Succ

Dicas

Resumo

Exercícios

 

8. Sub-Programas

8.1 Funções

8.2 Utilizando Funções para Conversão de Temperaturas

Testando o Programa Converte_Graus_C_Para_K

Testando o Programa Converte_Temperaturas

8.3 Procedimentos

8.4 O Comando return

8.5 Procedimento para Ordenação de Vetor

Algoritmo 8.1 - Ordenação de um Vetor de Números Inteiros pelo Método da Seleção Linear

Testando o Programa Testa_Ordena_Inteiros

8.6 Modo de Parâmetros

8.7 Função para Pesquisa em Tabelas

Testando o Programa Pesquisa_3

8.8 Escopo em Sub_Programas

Objetos Globais

Objetos Locais

Nível

Testando o Programa Demonstra_Escopo

8.9 Overloading

8.10 Modificando Ada.Text_IO.Put_Line

Algoritmo 8.2 - Exibe um Caractere na Tela e Avança Spacing Linhas

Algoritmo 8.3 - Exibe um String na Tela e Avança Spacing Linhas

8.11 Trabalhando com Arquivos

Arquivos

Operações com Arquivos

Create e Open

Get e Put

Close

Algoritmo 8.4 - Atualiza e Consulta Estoque

Sub-algoritmo Inicia (Nome, Tab)

Sub-algoritmo Atualiza (Tab)

Sub-algoritmo Cadastra

Sub-algoritmo Consulta

Sub-algoritmo Exclui

Sub-algoritmo Exibe

Sub-algoritmo Saida

Sub-algoritmo Entrada

Sub-algoritmo Conclui (Nome, Tab)

Testando o Programa Estoque

Estrutura do Programa

Dicas

Resumo

Exercícios

 

9. Packages

9.1 Especificação de um package

9.2 Tipos Particulares

9.3 Corpo de um package

Testando o Package Tabela_Para_Inteiros

Testando o Package Novo_Put_Line

9.4 Package para Escrever Valores por Extenso

Testando o Programa Testa_Extensao

9.5 Slices

9.6 Package Cara_Coroa

9.7 Visibilidade de Packages

9.8 Cláusula use type

Testando o Programa Use_Type

9.9 O Atributo Length

9.10 Packages Hierárquicos

Testando o Programa Testa_Package_Hierarquico

9.11Comando de Bloco

9.12 Tipos tagged

Testando o Programa Testa_Tagged

Dicas

Resumo

Exercícios

 

10. Exceptions

Testando o Programa Exception_1

10.1 Exceptions Pré-Definidas

10.2 Declarando Exceptions

10.3 O Comando raise

Testando o Programa Exception_2

10.4 Interceptação de Exceptions

Testando o Programa Exception_3

10.5 Package Ada.Exceptions

Testando o Programa Exception_4

10.6 Utilização de Exceptions

Algoritmo 10.1 - Teste do Package Tabela_Para_Inteiros_2

Testando o Programa Testa_Tabela_Para_Inteiros_2

Dicas

Resumo

Exercícios

 

11. Programação Concorrente

11.1 Conceitos

Programa Seqüencial

Programa Concorrente

Programa Paralelo

Task

Task Assíncrona

Task Síncrona

Indeterminismo

Pseudo Paralelismo

Scheduling

Quantum

Context Switching

Deadlock

Condições para Existência de Deadlock

Startvation

Estados de uma Task

Programa Errôneo

Task Mestre

Exclusão Mútua

Região Crítica

Rendezvous

11.2 Tasks Assíncronas

Testando o Programa Tasks_Asincronas

11.3 Declaração de Tasks Como um Tipode Dado

11.4 Tasks Síncronas

Mensagens

Entry

Testando o Programa Tasks_Sincronas_1

Accept

Entry Call

Fila de Entry

11.5 O Comando delay

Delay Relativo

Testando o Programa Delay_1

Delay Until

Testando o Programa Delay_2

11.6 O Comando select

Testando o Programa Sistema_De_Monitoracao

11.7 O Comando abort

Dicas

Resumo

Exercícios

 

Anexo 1 - A Notação BNF

Anexo 2 - Ada 95 Sintaxe com Exemplos

Anexo 3 - A Tabela ASCII

Anexo 4 - Ada+SQL

A4.1 Instalação

A4.1.a) Utilizando o sistema operacional Windows 95:

A4.1.b) Utilizando o sistema operacional Windows NT:

A4.1.c) Cuidados:

A4.2 Biblioteca (Library)

A4.3 Criando uma Biblioteca com um Conjunto de Programas

A4.3.1 Acionamento

A4.3.2 Diretório de Trabalho

A4.4 Compilando e Executando

A4.5 Mensagens de Erro

A4.6 Mensagens de Erro em Português

A4.7 Alterando o Quantum

A4.7.1 Troca do Quantum no Prompt do MS-DOS

A4.7.2 Troca do Quantum em E95

A4.8 Acionando o Debugger

A4.9 Demais Informações

 

Anexo 5 - Packages Pré-Definidos

A5.1 Standard

A5.2 Ada.Characters

A5.3 Ada.Characters.Handling

A5.4 Ada.Text_IO

A5.5 Ada.Integer_IO.Text_IO

A5.6 Ada.Float_IO_Text_IO

A5.7 Ada.Text_IO.Enumeration_IO

A5.8 Ada.Calendar

A5.9 Ada.Command_Line

Testando o Programa Mostra_Command_Line

A5.10 Ada.Strings

A5.11 Ada.Strings.Maps

A5.12 Ada.Strings.Maps.Constants

A5.13 Ada.Strings.Fixed

A5.14 Ada.Numerics

A5.15 Ada.Numerics.Generic_Elementary_Functions

A5.16 Ada.Numerics.Elementary_Functions

A5.17 Ada.Numerics.Discrete_Random

A5.18 Ada.Numerics.Float_Random

A5.19 System

 

Bibliografia

Glossário

Índice

Home Up Next

#

Last Updated: 28 Jan 2008 07:51:23 -0800

(C) 2002-2007 Arthur V. Lopes