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 el llamado código ficticio . Los esqueletos de programas se parecen al pseudocódigo , pero permiten analizar , compilar y probar el código. Se inserta un código ficticio en el esqueleto del programa para simular el procesamiento y evitar mensajes de error de compilación . Puede involucrar 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 esquelética facilita un enfoque de diseño de arriba hacia abajo , donde 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 algoritmos de alto nivel . También se puede utilizar un esqueleto de programa como plantilla que refleja la sintaxis y las estructuras comúnmente utilizadas 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 código auxiliar de método o un objeto simulado . En la nomenclatura de invocación de método remoto de Java (Java RMI), un stub 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 los roles de la clase y describe los propósitos de las variables y métodos , pero no los implementa. Posteriormente, la clase se implementa desde el esqueleto. El esqueleto también puede conocerse como interfaz o 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 un solo programador pueda desarrollarlo, o que otros módulos o piezas tengan que importarse por separado. Los programas también pueden ser demasiado complejos por sí solos, algunos con múltiples métodos para acceder a una sola variable al mismo tiempo o incluso generar píxeles para 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 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 función pequeña dentro de un programa más grande funcione temporalmente sin funcionalidad completa. 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, pueden codificarse para usarse durante el desarrollo. Generalmente implican código sintácticamente correcto para presentar 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 más comúnmente al desarrollar la estructura de una nueva pieza de software . Es una representación en inglés 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 esquelética, aunque se diferencia en 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 tiene un impacto mensurable en su psique . [3] Un programador típico está tan condicionado a 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 qué tan bien puede escribir su implementación definitiva. Esto se ha encontrado en una serie de 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 con lápiz y papel, alejando aún más el texto de lo que realmente se va a implementar. La programación esqueleto imita esto, pero difiere en la forma en que comúnmente se escribe 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 operar 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, si no todos, los lenguajes de programación tienen un código esqueleto que se utiliza para ayudar en la definición de todas las funciones y métodos integrados . Esto proporciona un medio sencillo 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 de objeto de los paquetes de Java. [4] Los lenguajes orientados a objetos se centran en una estructura basada en jerarquías para sus implementaciones, en lugar de un simple enfoque de arriba hacia abajo que se encuentra en otros lenguajes. Los 'objetos' almacenan datos y variables en ellos, lo que permite escribir un programa normalmente 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 y la sintaxis que se utilizará en un entorno de desarrollo integrado claramente visibles 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 esto le sigue una explicación detallada del funcionamiento del método, con los errores a continuación.

Python tiene un enfoque similar para documentar sus métodos integrados, sin embargo, 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 cualquiera que sea nuevo en la biblioteca sobre cómo funcionan las funciones y métodos. P5.Js utiliza 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 utiliza 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 con mayor frecuencia 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 usarla para crear un programa o un método. Una implementación de esto utiliza un pequeño conjunto de código esqueleto para implicar que la función se ejecuta en segundo plano. [7]

Otras formas de NLI utilizan diferentes formas de entrada, que van desde otros usuarios que hablan diferentes idiomas hasta entradas basadas en gestos para producir un resultado muy similar. Dado que 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 al paradigma de programación orientada a objetos , donde los métodos pueden ser anulados o sobrecargados (métodos con el mismo nombre en una clase secundaria que tendrán prioridad sobre un método escrito en una clase principal). La definición de métodos se basa en un marco esqueleto definido por la sintaxis del lenguaje. [9]

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 modelo de una clase, que permite que lenguajes estrictos orientados a objetos (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, permitiendo que cualquier otra persona use los métodos o implemente la clase para sus necesidades personales.

esqueleto públicoEjemplo();

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 hijo de esta clase (cualquier clase que se extienda o implemente) debe 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 la palabra clave "abstracto" para identificar el hecho de que debe implementarse en clases secundarias.

esqueleto abstracto públicoEjemplo();

Estos ejemplos utilizan la sintaxis de Java.

Programación paralela

La programación paralela es la operación de múltiples funciones simultáneamente y se usa más comúnmente para aumentar la eficiencia. Estos suelen ser los tipos de programas más difíciles de desarrollar, debido también a su complejidad e interconexión con el hardware en cuestión. Muchos desarrolladores han intentado escribir programas con esta funcionalidad principal, [10] sin embargo, han obtenido resultados variados.

Los marcos de esqueleto algorítmicos se utilizan en la programación paralela para describir de manera abstracta los métodos en cuestión para su posterior desarrollo. Los marcos no se limitan a un solo 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: datos paralelos , tareas paralelas y resolución. [10]

Datos paralelos

Estos algoritmos esqueléticos 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 indica, funcionan por tareas. Cada tipo de algoritmo es diferente debido a un cambio en el comportamiento entre tareas. Los algoritmos de tareas paralelas incluyen 'secuenciales', 'granjas', 'tuberías', 'si', 'para' y 'mientras'.

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 del algoritmo puede ser una "familia de problemas". [10] Hay dos tipos principales de estos esqueletos, "divide y vencerás" o "marca y ata".

Referencias

  1. ^ Hombre libre, Eric; Hombre libre, Elisabeth; Kathy, Sierra; Bert, Bates (2004). Hendrickson, Mike; Loukides, Mike (eds.). Patrones de diseño Head First (libro de bolsillo) . vol. 1. O'REILLY. pag. 440.ISBN​ 978-0-596-00712-6. Consultado el 28 de agosto de 2012 .
  2. ^ Lowery, Jeff (2 de noviembre de 2019). "¿Por qué es difícil el desarrollo de software?". Medio . 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". La interacción persona-ordenador . 9 (2): 225–246. doi :10.1207/s15327051hci0902_3. ISSN  0737-0024.
  4. ^ "Objeto (Plataforma Java 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". Gorjeo . Consultado el 19 de noviembre de 2020 .
  8. ^ Özcan, E. (2004). "Generación de esqueleto de clase Java utilizando una interfaz de lenguaje natural". Actas del 1er Taller Internacional sobre Comprensión del Lenguaje Natural y Ciencias Cognitivas . 1 . SciTePress - Publicaciones de ciencia y tecnología: 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", Educación en informática: apoyo al pensamiento computacional, Apuntes de conferencias sobre informática, 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, recuperado el 18 de noviembre de 2020
  10. ^ abcd González-Vélez, Horacio; Leyton, Mario (1 de noviembre de 2010). "Un estudio de marcos esqueléticos algorítmicos: habilitadores 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.