29 de mayo de 2016

04.5 Anexo Python: paradigmas y enfoque top-down

Paradigma

Thomas Kuhn, Structure of Scientific Revolutions (1962): "A paradigm is a constellation of concepts, values, perceptions and practices shared by a community which forms a particular vision of reality that is the basis of the way a community organises itself". Un paradigma es una amalgama de conceptos, valores, percepciones y prácticas compartidas por una comunidad que construye una visión particular de la realidad que es la base de la forma en la que la comunidad se organiza a sí misma.
En pocas palabras, es una forma de pensar, una forma de hacer las cosas: una forma de enfocar la realidad, un modelo de la realidad. A veces los paradigmas son conscientes, muchas veces no. Los paradigmas, pueden ser negativos o positivos, aceptarse o no aceptarse.
Ejemplo: ¿las cosas más caras son de mayor calidad? http://www.yorokobu.es/vino-caro/

Paradigmas en la programación

A la hora de programar también hay paradigmas: hay maneras de enfocar cómo diseñar un programa. Entre ellas:
  • Paradigma imperativo: el ordenador acepta órdenes en secuencia, y va cambiando el valor o estado de ciertas variables hasta conseguir la resolución de un problema (algoritmo). Hay una estructura y existe también una modularidad, es decir, ciertas partes del programa pueden reutilizarse varias veces en él u otros programas.
    • Paradigma de programación orientado a objetos (POO): es una variante del paradigma imperativo en el que, además, se declaran objetos que tienen propiedades y métodos propios.
    • Paradigma dinámico: un problema complejo se resuelve dividiéndolo en problemas más pequeños y resolviendo estos últimos, de manera recursiva. Los algoritmos dinámicos intentan optimizarse evitando resolver subproblemas varias veces (memoización).
  • Paradigma declarativo: en él el usuario describe el problema, sus condiciones e indica qué solución quiere encontrar, pero no da las instrucciones precisas de cómo encontrar la solución. Dentro del paradigma declarativo encontramos programación funcional (basada en funciones), lógica (basada en hechos, restricciones y planteamiento de hipótesis) y programación con restricciones.
  • Multiparadigma: usar más de un paradigma de programación en un lenguaje. De hecho, Python es un lenguaje imperativo, que soporta la POO y que puede utilizar, por ejemplo, el lenguaje específico, de tipo declarativo SQL.

Enfoque top-down

En el enfoque top-down formulamos un problema de su generalidad a sus partes. Vamos dividiendo el problema principal en subproblemas, cada vez con mayor nivel de detalle hasta completar el problema en sus totalidad.
Un enfoque top-down puro no resuelve el problema hasta no tener completado todos los niveles de subproblemas necesarios.
Se contrapone al enfoque bottom-up, en el que resolvemos pequeños problemas para después unirlos o usarlos y poder resolver problemas de mayor complejidad.
Actualmente se suele preferir usar un enfoque top-down, aunque con uso de código para resolver problemas parciales, lo que le da cierto aire de bottom-up. También se suele resolver el problema parcialmente usando la técnica de top-down, y completarlo usando técnicas de bottom-up o top-down.

enfoque top down

No hay comentarios:

Publicar un comentario