A complexidade de um programa pode ser dominada através da programação estruturada, uma metodologia que se compõe de alguns princípios elementares (Figura 4‑15):
· princípio da abstração é a concepção ou visão do programa separado de sua realidade. É a simplificação de fatos, descrevendo o que está sendo feito sem explicar como está sendo feito;
· princípio da formalidade possibilita analisar os programas de forma matemática. Fornece uma abordagem rigorosa e metódica. Possibilita a transmissão de idéias e instruções sem ambigüidades e permite que estas sejam automatizadas;
· princípio da divisão é a subdivisão organizacional de um programa em um conjunto de partes menores e independentes, mais fáceis de serem entendidas, resolvidas, manipuladas e testadas individualmente;
· princípio da hierarquia é a organização hierárquica que está relacionada com o princípio da divisão. A organização das partes em uma estrutura hierárquica do tipo árvore sempre aumenta a compreensibilidade.

Começando com um processo geral e abstrato do que o programa deve fazer, este é dividido em vários processos também abstratos. Qualquer uma destes processos pode, de forma hierárquica, ser dividido em mais processos abstratos e assim sucessivamente. A metodologia termina por chegar a um nível tal de formalidade no qual o processo pode ser implementado no computador.
No C++ Builder, um processo é implementado como uma função. As funções aceitam entradas e saídas de forma a generalizar o processo aplicando-se a quaisquer dados de tipos determinados. As entradas (e) são os argumentos e dados globais usados no procedimento ou função. As saídas (s) são o valor de retorno (as funções podem ou não possuir valor de retorno), modificações feitas através de ponteiros e referências, bem como mudanças em dados globais (Figura 4‑16).
As entradas e as saídas desempenham o papel da interface para os procedimentos e funções. Os usuários só precisam entender a interface para fazer uso dos procedimentos e funções. A seqüência de processos é um detalhe oculto. Por isso, e de forma geral, consideramos um procedimento ou uma função como um único processo abstrato.
Tomemos como exemplo a função Ordena cuja entrada é uma lista de 3 parâmetros inteiros e cuja saída é a mesma lista em ordem crescente. Assim, se x=7, y=-2 e z=4 teremos, após executar o procedimento Ordena(x, y, z), x=-2, y=4 e z=7. Outro exemplo é a função Maior cuja entrada são dois parâmetros reais e cuja saída é o valor de retorno maior entre os dois. Assim Maior(3, 4)=4, Maior(7, -2)=7, etc.

Evento é uma ação ou acontecimento reconhecido pelo programa. Programas feitos em linguagem orientada a eventos executam o processo definido pelo programador e correspondente ao evento que ocorreu.
A idéia da Programação Orientada a Objetos surgiu nos anos 60, porém apenas os programadores experientes e de alto conhecimento técnico se utilizavam dela, pois os conceitos de programação eram novos e a elaboração dos algoritmos era complicada. Só após o aparecimento dos ambientes gráficos (como o Windows) e das linguagens “Visuais” (como Delphi, C++ Builder, Visual C++, Visual Basic, etc.) os programadores se sentiram mais à vontade para utilizar este tipo de programação. Objetos são metáforas naturais para objetos físicos e entidades abstratas. Expressar a computação em termos de objetos reduz a lacuna entre o mundo real e o programa.
Para a maioria das pessoas a palavra objeto tem um sentido muito vago, porém os usuários do ambiente Windows estão acostumados a trabalhar a toda hora com objetos sem se darem conta disso.
Os programas Windows são basicamente formados por objetos: Formulários, Botões, Caixas de Edição, Rótulos, Imagens, Botões de Rádio, Caixas de Checagem, Barras de Rolagem, Memorandos, Caixas de Listagem, Caixas de Combinação, Caixas de Mensagem, Caixas de Diálogo, etc.
Objetos têm dados e processos, combinando-os de forma que os processos acessem ou modifiquem os dados. As classes são tipos de objetos declarados pelo usuário. Elas agregam uma declaração de dados e uma declaração de processos para processar os dados. Cada objeto é criado a partir de uma classe, via uma especificação do valor para seus dados. As classes descrevem grupos de objetos com propriedades semelhantes, comportamento, relacionamentos e semântica comuns. Todos os objetos da mesma classe têm processos comuns mas dados distintos.
Três idéias fundamentais caracterizam a programação orientada a objetos:
· encapsulamento: acesso ou modificação dos dados de forma a ocultar os detalhes da implementação destes com o uso de uma interface de processos. Assim a mesma classe pode ter diferentes implementações, em diferentes tempos, sem afetar o código que a utiliza. Os dados são definidos pela interface, e os detalhes de sua implementação são abstraídos.
· hereditariedade: organiza classes para reuso, com classes derivadas herdando processos de classes base (processos não necessitam recodificação para classes de componentes comuns). Estende os processos da programação procedimental para uma estrutura de dados e processos. Novas classes e seus processos podem ser definidas a partir de modificações incrementais e extensões de classes existentes.
· polimorfismo: o processo a ser executado sobre o objeto depende do objeto real (eventualmente identificado por ponteiro) em tempo de execução. Um processo para girar uma figura, por exemplo, vai chamar o código correto para girar um triângulo, um retângulo, etc.
