Esta obra tem como principal objectivo competências sólidas no desenvolvimento de programas de pequena e média complexidade usando a linguagem Java, versão 6. É entendimento dos autores que a introdução do ensino da programação não deve ser feita usando o paradigma da programação orientada a objectos, porque ele é demasiado complexo para uma primeira abordagem à programação. Em alternativa, acreditamos que é mais vantajoso introduzir a linguagem Java aplicando o paradigma da programação procedimental, cuja metodologia assenta na decomposição hierárquica das soluções, através de refinamentos sucessivos, como a forma mais natural de lidar com a complexidade. Especificamente, pretende-se atingir os seguintes objectivos:
- Compreensão clara do que é um computador, como funciona, para que serve, como se comunica com ele a aprendizagem das metodologias a ter em conta no desenvolvimento de software de qualidade;
- Desenvolvimento de estratégias para a especificação precisa do problema que se pretende resolver num computador e o estabelecimento de métodos para a descrição detalhada e rigorosa da solução do problema, usando o paradigma da programação procedimental;
- Normas de representação da informação num computador;
- Aprendizagem da linguagem de programação Java, versão 6, na perspectiva do paradigma procedimental, bem como de algumas das suas classes da interface de programação;
- Estudo das principais estruturas de dados estáticas, nomeadamente das sequências (arrays) e das sequências de caracteres (strings), e ainda dos ficheiros (files);
- Criação de tipos de dados que adequam a representação da informação às condições concretas do problema que se pretende resolver num computador;
- Introdução ao estudo dos algoritmos de pesquisa, de selecção e de ordenação.
1 - Computadores e Programação
1.1 Introdução
1.2 Computador, a grande revolução do século XX
1.3 O que é um computador?
1.4 Qual é a utilidade de um computador?
1.5 Classe de problemas que o computador resolve
1.6 Organização interna de um computador
1.7 O que é o sistema operativo?
1.8 Linguagens de programação
1.8.1 Linguagem máquina
1.8.2 Linguagens de baixo nível
1.8.3 Linguagens de alto nível
1.8.4 Que linguagem se deve usar para ensinar programação?
1.9 Paradigmas de programação
1.10 Fases do desenvolvimento de uma aplicação
1.10.1 Análise do problema
1.10.1.1 Especificação do problema
1.10.1.2 Análise algorítmica
1.10.1.3 Teste do algoritmo
1.10.2 Implementação da aplicação
1.10.2.1 Geração do código
1.10.2.2 Teste e validação do código
1.11 Princípios a ter em conta no desenvolvimento de software de qualidade
1.12 O ambiente de programação em Java
1.13 O sistema operativo UNIX
1.13.1 Identificação dos utilizadores
1.13.2 Organização da memória de massa
1.13.3 O interpretador de comandos (shell)
1.13.4 Os comandos mais usuais do UNIX
1.13.4.1 Comandos para processar directórios
1.13.4.2 Comandos para processar ficheiros
1.13.4.3 Editores de texto
1.13.5 Redireccionamento de entrada/saída de comandos
1.13.6 Execução de programas
Leituras Recomendadas
2 - Algoritmos
2.1 Introdução
2.2 Especificação do problema
2.3 Algoritmos e suas características
2.4 Decomposição hierárquica da solução
2.5 Regras gramaticais do pseudocódigo
2.6 Modelos de algoritmos
2.6.1 Modelo básico
2.6.2 Modelo básico modificado à entrada
2.6.3 Modelo básico modificado à saída
Exercícios
3 - Representação da Informação
3.1 Introdução
3.2 Sistemas de numeração
3.2.1 O sistema de numeração decimal
3.2.2 O sistema de numeração binário
3.2.3 Os sistemas de numeração octal e hexadecimal
3.2.4 Conversão decimal para binário
3.3 Representação de quantidades inteiras
3.3.1 Representação em sinal e módulo
3.3.2 Representação em complemento para um
3.3.3 Representação em complemento para dois
3.4 Aritmética inteira
3.5 Representação de quantidades reais
3.6 Aritmética real
3.7 Representação de símbolos
3.8 Big Endian versus Little Endian
Exercícios
Leituras Recomendadas
4 - Introdução à Linguagem Java
4.1 Introdução
4.2 A estrutura de um programa em Java
4.3 Elementos básicos da linguagem Java
4.4 Representação da informação
4.5 Tipos de dados primitivos
4.5.1 Tipos de dados aritméticos
4.5.1.1 Tipos de dados inteiros
4.5.1.2 Tipos de dados reais
4.5.1.3 Tipo de dados carácter
4.5.2 Tipo de dados booleano
4.6 Constantes e variáveis
4.7 Sequenciação
4.7.1 Expressões
4.7.2 Conversões
4.7.3 Operadores
4.7.3.1 Operadores aritméticos
4.7.3.2 Operadores relacionais
4.7.3.3 Operadores lógicos
4.7.3.4 Operadores para manipulação de bits
4.7.4 Instruções de atribuição
4.7.5 Associatividade e precedência dos operadores
4.8 Exemplo de um programa
4.9 Classes da interface de programação
4.9.1 A classe Character
4.9.2 A classe Math
Exercícios
5 - Entrada e Saída Formatadas de Dados
5.1 Introdução
5.2 Interacção entre a aplicação e o utilizador
5.3 A classe System
5.4 A classe JOptionPane
5.5 A classe Scanner
5.6 As classes ProgConsole e WIO
5.6.1 Janela de interacção
5.6.2 Entrada de dados
5.6.3 Saída de dados
5.7 A função printf
5.7.1 Escrita de booleanos
5.7.2 Escrita de caracteres
5.7.3 Escrita de numéricos
Exercícios
6 - Estruturas de Controlo
6.1 Introdução
6.2 Instruções decisórias
6.2.1 A instrução decisória binária if
6.2.2 A instrução decisória múltipla switch
6.2.3 Comparação das instruções decisórias
6.3 Instruções repetitivas
6.3.1 As instruções repetitivas do while e while
6.3.2 A instrução repetitiva for
6.3.3 Ciclos repetitivos imbricados
6.3.4 Ciclos repetitivos infinitos
6.3.5 A instrução nula
6.3.6 As instruções de salto break e continue
6.4 Exemplos
Exercícios
7 - Programação Procedimental
7.1 Introdução
7.2 Subprogramas
7.3 Funções da linguagem Java
7.3.1 Definição de uma função
7.3.2 Invocação de uma função
7.3.3 Uso indevido de funções
7.3.4 Procedimentos na linguagem Java
7.3.5 Parâmetros formais
7.3.6 Passagem dos tipos de dados primitivos
7.3.7 Exemplos simples
7.3.8 Visibilidade das variáveis
7.4 Criação de novos tipos de dados
7.4.1 Tipos de dados referências
7.4.2 Classes da linguagem Java
7.4.3 Comparação dos tipos de dados primitivos e referências
7.4.4 Passagem dos tipos de dados referências
7.4.5 Exemplos avançados
7.5 Organização de um programa em subprogramas
7.6 Subprogramas recursivos
Exercícios
8 - Sequências
8.1 Introdução
8.2 Características das sequências
8.2.1 Declaração de uma sequência
8.2.2 Inicialização de uma sequência
8.2.3 Sequências como parâmetros de subprogramas
8.2.4 Sequências como resultado de saída de funções
8.2.5 Cópia de sequências
8.2.6 Exemplos
8.3 A classe ArrayList
8.4 Exemplos mais complexos
8.5 Sequências bidimensionais
8.5.1 Exemplo de processamento de matrizes
8.6 Sequências tridimensionais
8.7 Sequências de tipos de dados referências
8.7.1 Declaração e criação de uma sequência de registos
8.7.2 Exemplos de bases de dados
8.8 Considerações finais sobre sequências
Exercícios
9 - Sequências de Caracteres
9.1 Introdução
9.2 Características das sequências de caracteres
9.2.1 Declaração de sequências de caracteres
9.2.2 Conversão entre sequências de caracteres e agregados de caracteres
9.2.3 Atribuição de sequências de caracteres
9.2.4 Sequências de caracteres versus caracteres
9.2.5 Acesso aos caracteres das sequências de caracteres
9.2.6 Leitura e escrita de sequências de caracteres
9.2.7 Passagem do tipo de dados String aos subprogramas
9.2.8 Sequências de caracteres como parâmetros de subprogramas
9.2.9 Sequências de caracteres como resultado de saída de funções
9.3 Exemplos simples
9.4 A classe String
9.5 Exemplo avançado
9.6 A classe StringBuffer
9.7 Sequências de sequências de caracteres
Exercícios
10 - Ficheiros
10.1 Introdução
10.2 Fluxos de comunicação
10.3 Fluxos de texto
10.3.1 Abertura de um ficheiro de texto para leitura
10.3.2 Fecho de um ficheiro de texto
10.3.3 Leitura de um ficheiro de texto
10.3.4 Exemplos de leitura de ficheiros de texto
10.3.5 Abertura de um ficheiro de texto para escrita
10.3.6 Escrita num ficheiro de texto
10.3.7 Exemplos de escrita de ficheiros de texto
10.4 Passagem de argumentos na linha de comando
10.5 Exemplos
10.5.1 Exemplos simples de utilização de ficheiros de texto
10.5.2 Gestão de uma base de dados com ficheiros de texto
10.6 Fluxos binários
10.6.1 Gestão de uma base de dados com ficheiros binários
10.7 Funções para operar sobre ficheiros
Exercícios
11 - Introdução à Pesquisa, Selecção e Ordenação
11.1 Introdução
11.2 Complexidade algorítmica
11.3 Pesquisa
11.3.1 Pesquisa sequencial
11.3.2 Pesquisa binária
11.3.3 Comparação entre as pesquisas sequencial e binária
11.4 Selecção
11.4.1 Selecção do maior valor
11.4.2 Selecção do menor valor
11.4.3 Selecção do primeiro valor que serve
11.4.4 Selecção do melhor valor que serve
11.4.5 Selecção do pior valor que serve
11.4.6 Exemplificação dos algoritmos de selecção
11.5 Ordenação
11.5.1 Ordenação por selecção
11.5.2 Ordenação por troca
11.5.3 Ordenação por inserção
11.5.4 Comparação dos algoritmos de ordenação
11.6 Ordenação por fusão
Exercícios
António Adrego da Rocha
Professor Auxiliar no Departamento de Electrónica, Telecomunicações e Informática na Universidade de Aveiro. A sua actividade de investigação tem sido dedicada à simulação e análise de algoritmos em linguagem C e na modelação e simulação em VHDL de arquitecturas de máquinas de estados finitas hierárquicas. No decurso da sua actividade pedagógica, tem leccionado Programação em Pascal, Sistemas Operativos, Sistemas Digitais, Programação em VHDL, Programação em linguagem C, Algoritmos e Estruturas de Dados Avançadas e Programação em Assembly. Autor dos livros Introdução à Programação usando C, 2ª Edição e Estruturas de Dados e Algoritmos em C, editados pela FCA.
Osvaldo Manuel da Rocha Pacheco
Professor Auxiliar no Departamento de Electrónica, Telecomunicações e Informática da Universidade de Aveiro. A sua actividade de investigação actual centra-se no desenvolvimento e integração de sistemas de informação. Pertence à Comissão Executiva do Programa Aveiro Digital, participando na gestão dos projectos da Universidade de Aveiro neste programa. No decurso da sua actividade pedagógica, tem leccionado Programação em Pascal, Programação em linguagem C e Programação em linguagem Java.