Skeleton (computer programming): Difference between revisions

Content deleted Content added
Citation bot (talk | contribs)
Alter: title. Add: chapter. | Use this bot. Report bugs. | Suggested by Eastmain | Category:Software | #UCB_Category 11/29
OAbot (talk | contribs)
m Open access bot: url-access updated in citation with #oabot.
 
(5 intermediate revisions by 5 users not shown)
Line 1:
{{Short description|Design pattern in software development}}
{{for|the use in distributed object communication|Distributed object communication#Skeleton}}
{{redirect|Dummy code|dummy coding|Categorical variable}}
Line 6 ⟶ 7:
Skeleton programming facilitates a [[Top-down and bottom-up design|top-down]] design approach, where a partially functional system with complete high-level structures is designed and coded, and this system is then progressively expanded to fulfill the requirements of the project. Program skeletons are also sometimes used for high-level descriptions of [[algorithm]]s. A program skeleton may also be utilized as a template that reflects syntax and structures commonly used in a wide class of problems.
 
Skeleton programs are utilized in the [[template method design pattern]] used in [[object-oriented programming]]. In [[object-oriented programming]], dummy code corresponds to an [[abstract method]], a [[method stub]] or a [[mock object]]. In the [[Java remote method invocation]] (Java RMI) nomenclature, a [[Stub (computer science)|stub]] communicates on the client-side with a skeleton on the [[server-side]].<ref>{{cite book
| last1 = Freeman
| first1 = Eric
Line 40 ⟶ 41:
== Relation to pseudocode ==
[[File:PXL 20201120 092248538.jpg|thumb|A generic example of pseudocode]]
[[Pseudocode]] is most commonly found when [[Plan|developing]] the structure of a new piece of [[software]]. It is a plain English portrayal of a particular function within a larger system, or can even be a representation of a whole program. Pseudocode is similar to skeleton programming, however deviates in the fact that pseudocode is primarily an informal method of programming.<ref name=":0">{{Cite journal|last=Bellamy|first=Rachel K. E.|date=1994-06-01|title=What Does Pseudo-Code Do? A Psychological Analysis of the use of Pseudo-Code by Experienced Programmers|url=https://www.tandfonline.com/doi/abs/10.1207/s15327051hci0902_3|journal=Human–Computer Interaction|volume=9|issue=2|pages=225–246|doi=10.1207/s15327051hci0902_3|issn=0737-0024|url-access=subscription}}</ref> Dummy code is also very similar to this, where code is used simply as a placeholder, or to signify the intended existence of a method in a class or interface.
 
[[Programmer|Computer programmers]] are extremely dependent on pseudocode, so much so that it has a measurable impact on their [[Psyche (psychology)|psyche]].<ref name=":0" /> A typical programmer is so conditioned with the idea of writing simplified code in some manner, be it by writing pseudocode or skeleton code, or even just by drawing a diagram, that this has a measurable impact on how well they can write their final implementation. This has been found over a number of applications, with different programmers working in different languages and varied [[programming paradigm]]s.
Line 63 ⟶ 64:
[[Natural-language user interface|Natural Language Interfaces]] (NLIs) are most typically found in situations where programmers attempt to take an [[Input/output|input]], usually [[Colloquialism|colloquially]] termed (without the use of programming language specific [[jargon]]) and use this to create a program or a method. An implementation of this uses a small set of skeleton code to imply the function running in the background.<ref>{{Cite web|last=Granger|first=Chris|date=2020-11-18|title=A first peek at something new we're working on.|url=https://twitter.com/ibdknox/status/1328797793138266113|access-date=2020-11-19|website=Twitter|language=en}}</ref>
 
Other forms of NLIs use different forms of input, ranging from other users speaking different languages, to gesture based input to produce a very similar result. With programming languages being developed and written primarily in English, people speaking other languages find it hard to develop new software. NLIs have been used in some studies <ref>{{Cite journal|last=Özcan|first=E.|title=Generating Java Class Skeleton Using a Natural Language Interface |date=2004|url=http://dx.doi.org/10.5220/0002683301260134|journal=Proceedings of the 1st International Workshop on Natural Language Understanding and Cognitive Science|publisher=SciTePress - Science and Technology Publications|volume=1|pages=126–134|doi=10.5220/0002683301260134|isbn=972-8865-05-8|doi-access=free}}</ref> to assist people in these situations. The study showed classes written in Java through the use of NLIs. This removed the need for learning syntactical rules, however meant that the class was written using a basic set of skeleton code.
 
=== Polymorphism-based definitions ===
[[Polymorphism (computer science)|Polymorphism]] is an ideology that follows with the [[Objectobject-oriented programming|object oriented programming]] [[paradigm]], where methods can be overridden or [[Overloaded method|overloaded]] (methods with the same name in a child class which will take priority over a method written in a parent class). The definition of methods is based on a skeleton framework defined by the [[syntax]] of the language.<ref>{{Citation|last1=Benaya|first1=Tamar|url=http://dx.doi.org/10.1007/978-3-540-69924-8_15|pages=161–170|place=Berlin, Heidelberg|publisher=Springer Berlin Heidelberg|isbn=978-3-540-69923-1|access-date=2020-11-18|last2=Zur|first2=Ela|title=Informatics Education - Supporting Computational Thinking |chapter=Understanding Object Oriented Programming Concepts in an Advanced Programming Course |series=Lecture Notes in Computer Science |year=2008 |volume=5090 |doi=10.1007/978-3-540-69924-8_15 |url-access=subscription}}</ref>
 
Very similar to class implementation, skeleton code can be used to define the methods that are part of an [[Interface (computing)|interface]]. An interface is essentially a [[blueprint]] of a class, which allows for strict object oriented languages (such as [[Java (programming language)|Java]]) to use classes from different [[Java package|packages]] without the need to fully understand the internal functions. Interfaces simply define the methods that have to be present within the class, allowing anyone else to use the methods or implement the class for their personal needs.
<syntaxhighlight lang="java">
public skeletonExample();
</syntaxhighlight>
 
Very similar to class implementation, skeleton code can be used to define the methods that are part of an [[Interface (computing)|interface]]. An interface is essentially a [[blueprint]] of a class, which allows for strict object oriented languages (such as [[Java (programming language)|Java]]) to use classes from different [[Java package|packages]] without the need to fully understand the internal functions. Interfaces simply define the methods that have to be present within the class, allowing anyone else to use the methods or implement the class for their personal needs.
public skeletonExample();
An [[abstract class]] is almost the same as a class implementation, however depending on the language, at least one method is defined as abstract. This implies that any children of this class (any classes that extend or implement) need to have a method defined for this. Abstract classes have a very similar definition style to interfaces, however a keyword ‘abstract’ is typically used to identify the fact that it needs to be implemented in child classes.
<syntaxhighlight lang="java">
public abstract skeletonExample();
These examples use the Java syntax.
</syntaxhighlight>
 
These examples use the [[Java syntax]].
 
== Parallel programming ==
[[Parallel computing|Parallel programming]] is the operation of multiple functions simultaneously most commonly used to increase efficiency. These are typically the hardest types of programs to develop, due to their complexity and interconnectedness with the [[Computer hardware|hardware]] in question as well. Many developers have attempted to write programs with this core functionality,<ref name=":1">{{Cite journal|last1=González-Vélez|first1=Horacio|last2=Leyton|first2=Mario|date=2010-11-01|title=A survey of algorithmic skeleton frameworks: high-level structured parallel programming enablers|url=http://dx.doi.org/10.1002/spe.1026|journal=Software: Practice and Experience|volume=40|issue=12|pages=1135–1160|doi=10.1002/spe.1026|s2cid=16211075 |issn=0038-0644|url-access=subscription}}</ref> however this has been met by varied results.
 
[[Algorithmic skeleton]] frameworks are used in parallel programming to abstractly describe the methods in question for later development. The frameworks are not limited to a single type, and each of these types have different purposes to increase the efficiency of the developer's program. These can be categorised into three main types: [[Data parallelism|data-parallel]], [[Task parallelism|task-parallel]] and resolution.<ref name=":1" />
Line 100 ⟶ 107:
 
* ‘Divide and conquer’ uses a map skeleton as its basis, combining this with a while skeleton to solve the problem. In map algorithms, functions on data are applied simultaneously. In ‘divide and conquer’ the set of data provided has a function applied to it using the map skeleton, however this can be applied recursively using the ‘while’ algorithm. The ‘while’ is only broken when the entire problem is solved.
* ‘Branch‘[[Branch and bound’bound]]’ is an algorithm that also uses map algorithms, however instead of applying the ‘while’ algorithm to run the tasks simultaneously, this algorithm splits the tasks into branches. Each branch has a specific purpose, or ‘bound’, where the conditional statement will cause it to stop.
 
{{Portal|Computer programming}}