É difícil escrever sobre níveis de abstração. É um conceito fundamental em ciência da computação porque está diretamente ligado com o conceito de modelagem. No entanto, é difícil de explicar, e difícil de exemplificar. Para o engenheiro de software, saber lidar com diferentes níveis de abstração é ao mesmo tempo um requisito da profissão, e, ao mesmo tempo, um desafio sempre presente.
Qual o nível correto de abstração que devo usar nesse caso? Essa é uma pergunta recorrente para o profissional consciente de que lidar com níveis de abstração é importante.
Afinal o que é abstração? Pura e simplesmente é a subtração de detalhes, ou seja, é a capacidade de expressar algo de maneira concisa, abstrata, sem que os detalhes fiquem a mostra. Em qualquer disciplina que lida com complexidade, abstrair detalhes é de fundamental importância. Por isso em engenharia de software o conceito e seu uso são importantes.
Em uma aula usei o exemplo da palavra árvore no sentido natural. Meu argumento é que quando pensamos em uma árvore, abstraímos vários detalhes e pensamos em uma idéia geral, mesmo sabendo que existem diferentes tipos de árvores. Sem ser por coincidência, a estrutura de dados árvore é fundamental na engenharia de software, mas aí é um outro tipo de árvore, cuja raiz é única e as folhas crescem para o chão (estranho, mas é isso mesmo). Pedi um exemplo da turma, e um voluntário falou “controle remoto”. Sua justificativa é que pensamos sobre e usamos o controle remoto como uma abstração, sem preocupação como ele funciona. Eu sei não é o melhor exemplo, mas ajudou, creio eu, a passar a mensagem.
Vejamos o que garimpei na rede em busca de uma melhor explicação sobre abstração. Alguns desses sítios estão em Inglês.
O primeiro é de dicas para escrever textos técnicos em Inglês. A autora é a Dra. Jan Strever do “Spokane Community College” no estado de Washington nos Estados Unidos. O interessante nessa indicação é a categorização que a professora usa para exemplificar o que é abstração. Gostei. Vejam aqui.
Para uma outra visão, que creio ajuda a melhor entendermos abstração, vale a pena ler o primeiro parágrafo do verbete abstracionismo da enciclopédia Itaú Cultural. Depois disso, visite um museu virtual com obras de Kandinsky e outro com obras de Klee. Vale a pena. Creio que os dois artistas bem expressam o conceito abstrato, isso claro sem falar em Picasso e o cubismo.
Voltando ao mundo da Engenharia de Software. Veja o que diz o popular Joel Spolsky: “But JavaSchools also fail to train the brains of kids to be adept, agile, and flexible enough to do good software design (and I don’t mean OO “design”, where you spend countless hours rewriting your code to rejiggle your object hierarchy, or you fret about faux “problems” like has-a vs. is-a). You need training to think of things at multiple levels of abstraction simultaneously, and that kind of thinking is exactly what you need to design great software” [ref]. O “blog” do Joel é também apresentado em Português.
Para os que gostam da Wikepedia, aqui vai o ponteiro (em Inglês). Em Português o foco da definição do Wikepedia é da área de filosofia, mas vale a pena olhar.
Voltarei a falar sobre o tema.
17/5/08: Voltei a escrever sobre o tema. Confira aqui.
…………
Leia sobre Sistemas de Informação.
Veja a página do autor.