Skeleton (computer programming)

Last updated

Skeleton programming is a style of computer programming based on simple high-level program structures and so called dummy code. Program skeletons resemble pseudocode, but allow parsing, compilation and testing of the code. Dummy code is inserted in a program skeleton to simulate processing and avoid compilation error messages. It may involve empty function declarations, or functions that return a correct result only for a simple test case where the expected response of the code is known.

Contents

Skeleton programming facilitates a 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 algorithms. 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 communicates on the client-side with a skeleton on the server-side. [1]

A class skeleton is an outline of a class that is used in software engineering. It contains a description of the class's roles, and describes the purposes of the variables and methods, but does not implement them. The class is later implemented from the skeleton. The skeleton can also be known as either an interface or an abstract class, with languages that follow a polymorphic paradigm.

Background

Modern software [2] is often complicated due to a host of reasons. This can mean that not just a single programmer can develop it, or that other modules or parts have to be separately imported. The programs can also be too complex on their own, some with multiple methods accessing a single variable at the same time or even generating pixels for displays. Skeleton code is used to assist programmers to develop their code with the fewest errors during the time of compilation.

Skeleton code is most commonly found in parallel programming, but is also applied in other situations, like documentation in programming languages. This helps to simplify the core functionality of a potentially confusing method. It can also be used to allow for a small function within a larger program to operate without full functionality temporarily. This method of programming is easier than writing a complete function, as these skeleton functions do not have to include main functionalities and can instead be hardcoded to use during development. They usually involve syntactically correct code to introduce the method, as well as comments to indicate the operation of the program. This is not always necessary to call a piece of text skeleton code.

Relation to pseudocode

A generic example of pseudocode PXL 20201120 092248538.jpg
A generic example of pseudocode

Pseudocode is most commonly found when 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. [3] 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.

Computer programmers are extremely dependent on pseudocode, so much so that it has a measurable impact on their psyche. [3] 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 paradigms.

This method of program design is also most often done on pen and paper, further moving the text from what is actually to be implemented. Skeleton programming mimics this, but differs in the way that it is commonly written in an integrated development environment, or text editors. This assists the further development of the program after the initial design stage. Skeleton programs also allow for simplistic functions to operate, if run.

Implementation

Skeleton programming can be implemented in a range of different programming applications.

Programming language documentation

Most, if not all programming languages have skeleton code used to assist in the definition of all built-in functions and methods. This provides a simple means for newer programmers to understand the syntax and intended implementation of the written methods.

Java, an object oriented language, focuses heavily on a structured documentation page with completely separated methods for each object part of Java's packages. [4] Object oriented languages focus on a hierarchy based structure to their implementations, rather than a simple top-down approach found in other languages. ‘Objects’ store data and variables in them, allowing for a typically more efficient program to be written. These objects have individual functions that can access internal variables, known as methods.

Each method is defined in the same format, with the name of the method as well as the syntax to be used in an integrated development environment clearly visible at the top of a block. With Java's focus on scope, data types and inheritance, this syntax is extremely useful for new, if not all programmers. This is followed by an in-depth explanation of the operation of the method, with errors below.

Python has a similar approach to document its in-built methods, however mimics the language's lack of fixation on scope and data types. [5] This documentation has the syntax of each method, along with a short description and an example of the typical use of the method or function. The skeleton code provided in the example gives programmers a good understanding of the function at a quick glance.

Class definition

Classes written by third-party developers, primarily as a part of libraries, also showcase their programming in the form of skeleton code. This helps to inform any that are new to the library as to how the functions and methods operate. P5.Js uses this format on their documentation page to explain the intended use of certain included functions. [6] This is different to the programming language documentation however, using skeleton code to display parameters rather than all possible uses of the method.

Natural Language Interfaces (NLIs) are most typically found in situations where programmers attempt to take an input, usually 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. [7]

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 [8] 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 is an ideology that follows with the object oriented programming paradigm, where methods can be overridden or 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. [9]

Very similar to class implementation, skeleton code can be used to define the methods that are part of an interface. An interface is essentially a blueprint of a class, which allows for strict object oriented languages (such as Java) to use classes from different 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.

public abstract skeletonExample();

These examples use the Java syntax.

Parallel programming

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 hardware in question as well. Many developers have attempted to write programs with this core functionality, [10] 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-parallel, task-parallel and resolution. [10]

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’.

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’.

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”. [10] There are two main types of these skeletons, ‘divide and conquer’ or ‘brand and bound’.

Related Research Articles

Computer programming is the process of performing particular computations, usually by designing and building executable computer programs. Programming involves tasks such as analysis, generating algorithms, profiling algorithms' accuracy and resource consumption, and the implementation of algorithms. The source code of a program is written in one or more languages that are intelligible to programmers, rather than machine code, which is directly executed by the central processing unit. To produce machine code, the source code must either be compiled or transpiled. Compiling takes the source code from a low-level programming language and converts it into machine code. Transpiling on the other hand, takes the source-code from a high-level programming language and converts it into bytecode. This is interpreted into machine code. The purpose of programming is to find a sequence of instructions that will automate the performance of a task on a computer, often for solving a given problem. Proficient programming thus usually requires expertise in several different subjects, including knowledge of the application domain, specialized algorithms, and formal logic.

In object-oriented programming, a class is an extensible program-code-template for creating objects, providing initial values for state and implementations of behavior. In many languages, the class name is used as the name for the class, the name for the default constructor of the class, and as the type of objects generated by instantiating the class; these distinct concepts are easily conflated. Although, to the point of conflation, one could argue that is a feature inherent in a language because of its polymorphic nature and why these languages are so powerful, dynamic and adaptable for use compared to languages without polymorphism present. Thus they can model dynamic systems more easily.

In software engineering and computer science, abstraction is:

Generic programming is a style of computer programming in which algorithms are written in terms of data types to-be-specified-later that are then instantiated when needed for specific types provided as parameters. This approach, pioneered by the ML programming language in 1973, permits writing common functions or types that differ only in the set of types on which they operate when used, thus reducing duplicate code.

Computer science is the study of the theoretical foundations of information and computation and their implementation and application in computer systems. One well known subject classification system for computer science is the ACM Computing Classification System devised by the Association for Computing Machinery.

A method in object-oriented programming (OOP) is a procedure associated with an object, and generally also a message. An object consists of state data and behavior; these compose an interface, which specifies how the object may be used. A method is a behavior of an object parametrized by a user.

In computer science, separation of concerns is a design principle for separating a computer program into distinct sections. Each section addresses a separate concern, a set of information that affects the code of a computer program. A concern can be as general as "the details of the hardware for an application", or as specific as "the name of which class to instantiate". A program that embodies SoC well is called a modular program. Modularity, and hence separation of concerns, is achieved by encapsulating information inside a section of code that has a well-defined interface. Encapsulation is a means of information hiding. Layered designs in information systems are another embodiment of separation of concerns.

In computer science, reflective programming or reflection is the ability of a process to examine, introspect, and modify its own structure and behavior.

In computing, an interface is a shared boundary across which two or more separate components of a computer system exchange information. The exchange can be between software, computer hardware, peripheral devices, humans, and combinations of these. Some computer hardware devices, such as a touchscreen, can both send and receive data through the interface, while others such as a mouse or microphone may only provide an interface to send data to a given system.

This article compares two programming languages: C# with Java. While the focus of this article is mainly the languages and their features, such a comparison will necessarily also consider some features of platforms and libraries. For a more detailed comparison of the platforms, see Comparison of the Java and .NET platforms.

Call super is a code smell or anti-pattern of some object-oriented programming languages. Call super is a design pattern in which a particular class stipulates that in a derived subclass, the user is required to override a method and call back the overridden function itself at a particular point. The overridden method may be intentionally incomplete, and reliant on the overriding method to augment its functionality in a prescribed manner. However, the fact that the language itself may not be able to enforce all conditions prescribed on this call is what makes this an anti-pattern.

Haxe is a high-level cross-platform programming language and compiler that can produce applications and source code for many different computing platforms from one code-base. It is free and open-source software, released under the MIT License. The compiler, written in OCaml, is released under the GNU General Public License (GPL) version 2.

<span class="mw-page-title-main">JADE (programming language)</span>

JADE is a proprietary object-oriented software development and deployment platform product from the New Zealand-based Jade Software Corporation, first released in 1996. It consists of the JADE programming language, Integrated development environment and debugger, integrated application server and object database management system.

The following outline is provided as an overview of and topical guide to computer programming:

In computing, algorithmic skeletons, or parallelism patterns, are a high-level parallel programming model for parallel and distributed computing.

This article attempts to set out the various similarities and differences between the various programming paradigms as a summary in both graphical and tabular format with links to the separate discussions concerning these similarities and differences in extant Wikipedia articles.

Object-Oriented Programming (OOP) is a programming paradigm based on the concept of "objects", which can contain data and code. The data is in the form of fields, and the code is in the form of procedures.

The following outline is provided as an overview of and topical guide to C++:

The composition filters model denotes a modular extension to the conventional object model. It provides a solution for a wide range of problems in the construction of large and complex applications. Most notably, one implementation of composition filters provides an abstraction layer for message-passing systems.

This glossary of computer science is a list of definitions of terms and concepts used in computer science, its sub-disciplines, and related fields, including terms relevant to software, data science, and computer programming.

References

  1. Freeman, Eric; Freeman, Elisabeth; Kathy, Sierra; Bert, Bates (2004). Hendrickson, Mike; Loukides, Mike (eds.). Head First Design Patterns (paperback). Vol. 1. O'REILLY. p. 440. ISBN   978-0-596-00712-6 . Retrieved August 28, 2012.
  2. Lowery, Jeff (November 2, 2019). "Why is Software Development Difficult?". Medium. Retrieved November 15, 2020.
  3. 1 2 Bellamy, Rachel K. E. (June 1, 1994). "What Does Pseudo-Code Do? A Psychological Analysis of the use of Pseudo-Code by Experienced Programmers". Human–Computer Interaction. 9 (2): 225–246. doi:10.1207/s15327051hci0902_3. ISSN   0737-0024.
  4. "Object (Java Platform SE 8 )". docs.oracle.com. Retrieved October 2, 2020.
  5. "Built-in Functions — Python v3.0.1 documentation". docs.python.org. February 14, 2009. Retrieved October 3, 2020.
  6. "reference | p5.js". p5js.org. Retrieved November 15, 2020.
  7. Granger, Chris (November 18, 2020). "A first peek at something new we're working on". Twitter. Retrieved November 19, 2020.
  8. Özcan, E. (2004). "Generating Java Class Skeleton Using a Natural Language Interface". Proceedings of the 1st International Workshop on Natural Language Understanding and Cognitive Science. SciTePress - Science and Technology Publications. 1: 126–134. doi:10.5220/0002683301260134. ISBN   972-8865-05-8.
  9. Benaya, Tamar; Zur, Ela (2008), "Understanding Object Oriented Programming Concepts in an Advanced Programming Course", Informatics Education - Supporting Computational Thinking, Lecture Notes in Computer Science, vol. 5090, Berlin, Heidelberg: Springer Berlin Heidelberg, pp. 161–170, doi:10.1007/978-3-540-69924-8_15, ISBN   978-3-540-69923-1 , retrieved November 18, 2020
  10. 1 2 3 4 González-Vélez, Horacio; Leyton, Mario (November 1, 2010). "A survey of algorithmic skeleton frameworks: high-level structured parallel programming enablers". Software: Practice and Experience. 40 (12): 1135–1160. doi:10.1002/spe.1026. ISSN   0038-0644. S2CID   16211075.