Skeleton (computer programming): Difference between revisions

Content deleted Content added
Monky2020 (talk | contribs)
m fixed citations
Monky2020 (talk | contribs)
added section on polymorphism
Line 71:
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.|date=2004|title=GENERATING JAVA CLASS SKELETON USING A NATURAL LANGUAGE INTERFACE|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|via=}}</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.
 
=== Parallel'''Polymorphism programmingbased definitions''' ===
[[Polymorphism (computer science)|Polymorphism]] is an ideology that follows with the [[Object-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|last=Benaya|first=Tamar|title=Understanding Object Oriented Programming Concepts in an Advanced Programming Course|url=http://dx.doi.org/10.1007/978-3-540-69924-8_15|work=Lecture Notes in Computer Science|volume=|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}}</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.
 
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.
 
== 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|last=González-Vélez|first=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|issn=0038-0644|via=}}</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" />.
 
==== Data-Parallel ====
These skeleton algorithms are used to develop programs that work on large data based software, usually identifying the connections between data for later use. Data parallel algorithms include ‘maps’, ‘forks’ and ‘reduces’ or ‘scans’.
 
Line 84 ⟶ 91:
* ‘Reduces’ or ‘scans’ are used to apply prefixes to a set of data, before then applying an operation upon the data. These are different to ‘maps’ as they have a set of partial results during the runtime of the method itself.
 
=== '''Task-Parallel''' ===
 
These operations, as their name suggests, work on tasks. Each type of algorithm under this is different due to a change in the behaviour between tasks. Task parallel algorithms include ‘sequentials’, ‘farms’, ‘pipes’, ‘if’, ‘for’ and ‘while’.
 
Line 95 ⟶ 101:
* ‘While’ is an algorithm very similar to the operation of a ‘for’ algorithm, where a task is completed a number of times. However in ‘while’ algorithms, the program computes the task a number of times before a conditional statement is met. This means that the ‘while’ algorithm can perform its task a different number of times for each time it is run.
 
=== '''Resolution Skeletons''' ===
 
These skeletons are very different to the typical skeletons found above. ‘Resolution’ algorithms use a combination of methods to solve a specified problem. The algorithm’s given problem can be a “family of problems” <ref name=":1" />. There are two main types of these skeletons, ‘divide and conquer’ or ‘brand and bound’.