Níveis de Abstração

É 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.

19 Respostas to “Níveis de Abstração”

  1. Aula 5 « Princípios de Engenharia de Software Says:

    […] Sobre níveis de abstração vale a pena ler o que escrevi em outro lugar. […]

  2. Helsen Says:

    Olá, muito interessante o artigo, retirei uma citação sua referente aos níveis de abstração para o meu Trabalho cientifico sobre MDA. Muito obrigado.

  3. jcspl Says:

    Obrigado.

  4. António Gil Hernández Says:

    Tomei estas suas reflexões para redigir um texto que apresentarei aos VI Colóquio Anual da Lusofonia (Bragança, Portugal, 3-6 Outubro 2007).
    Obrigado.

  5. jcspl Says:

    Obrigado. Sucesso na apresentação.

  6. Aula 13 « Princípios de Engenharia de Software Says:

    […] Leiam sobre Abstração. […]

  7. Aula 20 « Princípios de Engenharia de Software Says:

    […] diferentes níveis de abstração, […]

  8. Aula 14 « Princípios de Engenharia de Software Says:

    […] Leiam sobre Abstração. […]

  9. A Necessidade da Abstração (A Visão do Poeta) « Amazing Says:

    […] Necessidade da Abstração (A Visão do Poeta) Em nota anterior, “Níveis de Abstração“, já tinha apontado da importância do conceito de abstração para a engenharia de […]

  10. Aula 3 « Princípios de Engenharia de Software Says:

    […] Sobre níveis de abstração vale a pena ler o que escrevi em outro lugar. […]

  11. Aula 7 « Princípios de Engenharia de Software Says:

    […] diferentes níveis de abstração e […]

  12. Gustavo Says:

    Show de bola esse conteudo……………………………………

  13. Aulas 2 & 3 « Princípios de Engenharia de Software Says:

    […] do filme é o aninhamento dos sonhos (um sonho dentro do sonho) em diferentes níveis de abstração. Isso é feito de maneira espetacular, onde a cada sonho mais profundo, maior é a proporção de […]

  14. francisco xavier jose Says:

    Alo,gostaria imenso que me enviasses conteudos detalhados sobre niveis de abstracao e mecanismos para execucao de programas,cpu e baramentos.sou cursante de engeh.informat.Tete,Mocambique

  15. Escolhendo a próxima linguagem da JVM | Gabriel Amorim Says:

    […] O paradigma funcional é o destaque do artigo. É afirmado que “a chave para a eficácia do paradigma funcional está na habilidade de expressar ideias em um alto nível de abstração”. […]

  16. Obas Says:

    Eu sou aprendiz ainda nao sei nada isso mas ja valeu mesmo por ter postado isso me ajudara para abrir me mais a mente…

  17. subrack Says:

    Thanks , I’ve recently been looking for info about this subject for a while
    and yours is the greatest I’ve came upon till now. However, what concerning the bottom line?
    Are you certain concerning the source?

Deixe um comentário