Quando programamos estamos modelando aspectos do `mundo real' utilizando uma linguagem de programação. Assim sempre temos um aspecto do `mundo real', a representação deste aspecto no `mundo computacional' (em tempo de execução) e a descrição deste aspecto no `mundo sintático' (em uma linguagem de programação).
De fato, a atividade de programação pode ser vista como um processo de abstração seguido de um processo de formalização. Durante o processo de abstração desprezamos aspectos do `mundo real' que são irrelevantes para a implementação do sistema de interesse. Já no processo de formalização codificamos os aspectos relevantes do `mundo real' em uma linguagem de programação.
Dependendo de como os processos descritos acima são realizados distingui-se programação imperativa de programação orientada a objetos. Com programação imperativa primeiro focalizamos as funções que um sistema vai oferecer ao usuário. Por outro lado, com programação orientada a objetos primeiro focalizamos os objetos (dados) a serem manipulados pelo sistema; só depois é que iremos nos preocupar com as atividades que um dado objeto vai poder realizar.