stringtranslate.com

Esqueleto (programación informática)

La programación esqueleto es un estilo de programación informática basado en estructuras de programas simples de alto nivel y en el llamado código ficticio . Los esqueletos de programas se parecen al pseudocódigo , pero permiten el análisis , la compilación y la prueba del código. El código ficticio se inserta en un esqueleto de programa para simular el procesamiento y evitar mensajes de error de compilación . Puede implicar declaraciones de funciones vacías o funciones que devuelven un resultado correcto solo para un caso de prueba simple donde se conoce la respuesta esperada del código.

La programación de esqueletos facilita un enfoque de diseño de arriba hacia abajo , en el que se diseña y codifica un sistema parcialmente funcional con estructuras completas de alto nivel, y luego este sistema se expande progresivamente para cumplir con los requisitos del proyecto. Los esqueletos de programas también se utilizan a veces para descripciones de alto nivel de algoritmos . Un esqueleto de programa también se puede utilizar como una plantilla que refleja la sintaxis y las estructuras que se usan comúnmente en una amplia clase de problemas.

Los programas esqueleto se utilizan en el patrón de diseño de métodos de plantilla utilizado en la programación orientada a objetos . En la programación orientada a objetos , el código ficticio corresponde a un método abstracto , un fragmento de método o un objeto simulado . En la nomenclatura de invocación de método remoto de Java (Java RMI), un fragmento se comunica en el lado del cliente con un esqueleto en el lado del servidor. [1]

Un esqueleto de clase es un esquema de una clase que se utiliza en ingeniería de software . Contiene una descripción de las funciones de la clase y describe los propósitos de las variables y los métodos , pero no los implementa. La clase se implementa posteriormente a partir del esqueleto. El esqueleto también puede conocerse como una interfaz o una clase abstracta , con lenguajes que siguen un paradigma polimórfico.

Fondo

El software moderno [2] suele ser complicado por diversas razones. Esto puede significar que no puede ser desarrollado por un solo programador o que otros módulos o partes deben importarse por separado. Los programas también pueden ser demasiado complejos por sí solos, algunos con múltiples métodos que acceden a una sola variable al mismo tiempo o incluso generan píxeles para las pantallas. El código esqueleto se utiliza para ayudar a los programadores a desarrollar su código con la menor cantidad de errores durante el tiempo de compilación .

El código esqueleto se encuentra más comúnmente en la programación paralela , pero también se aplica en otras situaciones, como la documentación en lenguajes de programación . Esto ayuda a simplificar la funcionalidad principal de un método potencialmente confuso. También se puede utilizar para permitir que una pequeña función dentro de un programa más grande funcione sin la funcionalidad completa temporalmente. Este método de programación es más fácil que escribir una función completa, ya que estas funciones esqueleto no tienen que incluir funcionalidades principales y, en cambio, se pueden codificar para usar durante el desarrollo. Por lo general, implican código sintácticamente correcto para introducir el método, así como comentarios para indicar el funcionamiento del programa. Esto no siempre es necesario para llamar a un fragmento de código esqueleto de texto.

Relación con el pseudocódigo

Un ejemplo genérico de pseudocódigo

El pseudocódigo se encuentra con mayor frecuencia al desarrollar la estructura de un nuevo software . Es una representación en lenguaje sencillo de una función particular dentro de un sistema más grande, o incluso puede ser una representación de un programa completo. El pseudocódigo es similar a la programación esqueleto, sin embargo se diferencia en el hecho de que el pseudocódigo es principalmente un método informal de programación. [3] El código ficticio también es muy similar a esto, donde el código se usa simplemente como un marcador de posición, o para indicar la existencia prevista de un método en una clase o interfaz.

Los programadores informáticos dependen en gran medida del pseudocódigo, hasta el punto de que este tiene un impacto mensurable en su psiquis . [3] Un programador típico está tan condicionado con la idea de escribir código simplificado de alguna manera, ya sea escribiendo pseudocódigo o código esqueleto, o incluso simplemente dibujando un diagrama, que esto tiene un impacto mensurable en lo bien que puede escribir su implementación final. Esto se ha encontrado en varias aplicaciones, con diferentes programadores trabajando en diferentes lenguajes y variados paradigmas de programación .

Este método de diseño de programas también se realiza con mayor frecuencia en lápiz y papel, lo que aleja aún más el texto de lo que realmente se va a implementar. La programación esqueleto imita esto, pero se diferencia en la forma en que se escribe comúnmente en un entorno de desarrollo integrado o editores de texto . Esto ayuda al desarrollo posterior del programa después de la etapa de diseño inicial . Los programas esqueleto también permiten que funcionen funciones simplistas, si se ejecutan.

Implementación

La programación esqueleto se puede implementar en una variedad de aplicaciones de programación diferentes.

Documentación del lenguaje de programación

La mayoría de los lenguajes de programación, si no todos, tienen un código básico que se utiliza para ayudar en la definición de todas las funciones y métodos integrados . Esto proporciona un medio simple para que los programadores más nuevos comprendan la sintaxis y la implementación prevista de los métodos escritos.

Java , un lenguaje orientado a objetos , se centra en gran medida en una página de documentación estructurada con métodos completamente separados para cada parte del objeto de los paquetes de Java. [4] Los lenguajes orientados a objetos se centran en una estructura basada en jerarquía para sus implementaciones, en lugar de un enfoque simple de arriba hacia abajo que se encuentra en otros lenguajes. Los "objetos" almacenan datos y variables en ellos, lo que permite escribir un programa típicamente más eficiente. Estos objetos tienen funciones individuales que pueden acceder a variables internas, conocidas como métodos.

Cada método se define en el mismo formato, con el nombre del método así como la sintaxis que se utilizará en un entorno de desarrollo integrado claramente visible en la parte superior de un bloque. Con el enfoque de Java en el alcance , los tipos de datos y la herencia , esta sintaxis es extremadamente útil para los programadores nuevos, si no para todos. A continuación, se incluye una explicación detallada del funcionamiento del método, con errores a continuación.

Python tiene un enfoque similar para documentar sus métodos integrados, pero imita la falta de fijación del lenguaje en el alcance y los tipos de datos. [5] Esta documentación tiene la sintaxis de cada método, junto con una breve descripción y un ejemplo del uso típico del método o función. El código esqueleto proporcionado en el ejemplo brinda a los programadores una buena comprensión de la función de un vistazo rápido.

Definición de clase

Las clases escritas por desarrolladores externos, principalmente como parte de bibliotecas, también muestran su programación en forma de código esqueleto. Esto ayuda a informar a quienes son nuevos en la biblioteca sobre cómo funcionan las funciones y los métodos. P5.Js usa este formato en su página de documentación para explicar el uso previsto de ciertas funciones incluidas. [6] Sin embargo, esto es diferente a la documentación del lenguaje de programación, ya que se usa código esqueleto para mostrar parámetros en lugar de todos los usos posibles del método.

Las interfaces de lenguaje natural (NLI) se encuentran más comúnmente en situaciones en las que los programadores intentan tomar una entrada , generalmente denominada coloquialmente (sin el uso de la jerga específica del lenguaje de programación ) y la utilizan para crear un programa o un método. Una implementación de esto utiliza un pequeño conjunto de código esqueleto para implicar la función que se ejecuta en segundo plano. [7]

Otras formas de NLI utilizan diferentes formas de entrada, que van desde otros usuarios que hablan otros idiomas hasta la entrada basada en gestos para producir un resultado muy similar. Como los lenguajes de programación se desarrollan y escriben principalmente en inglés, a las personas que hablan otros idiomas les resulta difícil desarrollar software nuevo. Los NLI se han utilizado en algunos estudios [8] para ayudar a las personas en estas situaciones. El estudio mostró clases escritas en Java mediante el uso de NLI. Esto eliminó la necesidad de aprender reglas sintácticas, sin embargo, significó que la clase se escribió utilizando un conjunto básico de código esqueleto.

Definiciones basadas en polimorfismo

El polimorfismo es una ideología que sigue el paradigma de la programación orientada a objetos , donde los métodos pueden ser anulados o sobrecargados (métodos con el mismo nombre en una clase hija que tendrán prioridad sobre un método escrito en una clase padre). La definición de métodos se basa en un marco de trabajo esqueleto definido por la sintaxis del lenguaje. [9]

De forma muy similar a la implementación de clases, el código esqueleto se puede utilizar para definir los métodos que forman parte de una interfaz . Una interfaz es esencialmente un plano de una clase, lo que permite que los lenguajes orientados a objetos estrictos (como Java ) utilicen clases de diferentes paquetes sin la necesidad de comprender completamente las funciones internas. Las interfaces simplemente definen los métodos que deben estar presentes dentro de la clase, lo que permite que cualquier otra persona utilice los métodos o implemente la clase para sus necesidades personales.

esqueleto públicoExample();

Una clase abstracta es casi lo mismo que una implementación de clase, sin embargo, dependiendo del lenguaje, al menos un método se define como abstracto. Esto implica que cualquier clase secundaria de esta clase (cualquier clase que extienda o implemente) necesita tener un método definido para esto. Las clases abstractas tienen un estilo de definición muy similar al de las interfaces, sin embargo, normalmente se usa una palabra clave 'abstract' para identificar el hecho de que necesita implementarse en clases secundarias.

esqueleto abstracto públicoExample();

Estos ejemplos utilizan la sintaxis Java.

Programación paralela

La programación paralela es la operación simultánea de múltiples funciones, que se utiliza con mayor frecuencia para aumentar la eficiencia. Estos suelen ser los tipos de programas más difíciles de desarrollar, debido a su complejidad y a su interconexión con el hardware en cuestión. Muchos desarrolladores han intentado escribir programas con esta funcionalidad básica, [10] sin embargo, los resultados han sido variados.

Los marcos de trabajo de esqueleto algorítmico se utilizan en la programación paralela para describir de forma abstracta los métodos en cuestión para su posterior desarrollo. Los marcos de trabajo no se limitan a un único tipo, y cada uno de estos tipos tiene diferentes propósitos para aumentar la eficiencia del programa del desarrollador. Estos se pueden clasificar en tres tipos principales: paralelo a datos , paralelo a tareas y resolución. [10]

Datos paralelos

Estos algoritmos de esqueleto se utilizan para desarrollar programas que funcionan con software basado en grandes cantidades de datos, generalmente identificando las conexiones entre los datos para su uso posterior. Los algoritmos de datos paralelos incluyen "mapas", "bifurcaciones" y "reducciones" o "escaneos".

Tareas paralelas

Estas operaciones, como su nombre lo indica, funcionan sobre tareas. Cada tipo de algoritmo es diferente debido a un cambio en el comportamiento entre tareas. Los algoritmos de tareas paralelas incluyen 'sequentials', 'farms', 'pipes', 'if', 'for' y 'while'.

Esqueletos de resolución

Estos esqueletos son muy diferentes a los esqueletos típicos que se encuentran arriba. Los algoritmos de "resolución" utilizan una combinación de métodos para resolver un problema específico. El problema dado por el algoritmo puede ser una "familia de problemas". [10] Hay dos tipos principales de estos esqueletos, "dividir y vencer" o "marcar y acotar".

Referencias

  1. ^ Freeman, Eric; Freeman, Elisabeth; Kathy, Sierra; Bert, Bates (2004). Hendrickson, Mike; Loukides, Mike (eds.). Patrones de diseño Head First (libro de bolsillo) . Vol. 1. O'REILLY. pág. 440. ISBN 978-0-596-00712-6. Recuperado el 28 de agosto de 2012 .
  2. ^ Lowery, Jeff (2 de noviembre de 2019). "¿Por qué es difícil el desarrollo de software?". Medium . Consultado el 15 de noviembre de 2020 .
  3. ^ ab Bellamy, Rachel KE (1 de junio de 1994). "¿Qué hace el pseudocódigo? Un análisis psicológico del uso del pseudocódigo por parte de programadores experimentados". Interacción persona-ordenador . 9 (2): 225–246. doi :10.1207/s15327051hci0902_3. ISSN  0737-0024.
  4. ^ "Objeto (Java Platform SE 8)". docs.oracle.com . Consultado el 2 de octubre de 2020 .
  5. ^ "Funciones integradas: documentación de Python v3.0.1". docs.python.org . 14 de febrero de 2009 . Consultado el 3 de octubre de 2020 .
  6. ^ "referencia | p5.js". p5js.org . Consultado el 15 de noviembre de 2020 .
  7. ^ Granger, Chris (18 de noviembre de 2020). "Un primer vistazo a algo nuevo en lo que estamos trabajando". Twitter . Consultado el 19 de noviembre de 2020 .
  8. ^ Özcan, E. (2004). "Generación de un esqueleto de clase Java mediante una interfaz de lenguaje natural". Actas del 1.er taller internacional sobre comprensión del lenguaje natural y ciencia cognitiva . 1. SciTePress - Publicaciones científicas y tecnológicas: 126–134. doi : 10.5220/0002683301260134 . ISBN . 972-8865-05-8.
  9. ^ Benaya, Tamar; Zur, Ela (2008), "Comprensión de los conceptos de programación orientada a objetos en un curso de programación avanzada", Informatics Education - Supporting Computational Thinking, Lecture Notes in Computer Science, vol. 5090, Berlín, Heidelberg: Springer Berlin Heidelberg, págs. 161–170, doi :10.1007/978-3-540-69924-8_15, ISBN 978-3-540-69923-1, consultado el 18 de noviembre de 2020
  10. ^ abcd González-Vélez, Horacio; Leyton, Mario (1 de noviembre de 2010). "Un estudio de los marcos de trabajo de esqueleto algorítmico: facilitadores de programación paralela estructurada de alto nivel". Software: práctica y experiencia . 40 (12): 1135–1160. doi :10.1002/spe.1026. ISSN  0038-0644. S2CID  16211075.