The prefix prot-, or proto-, comes from Greek and has the basic meaning "first in time" or "first formed." A prototype is someone or something that serves as a model or inspiration for those that come later. A successful fund-raising campaign can serve as a prototype for future campaigns. The legendary Robin Hood, the "prototypical" kindhearted and honorable outlaw, has been the inspiration for countless other romantic heroes. And for over a century, Vincent van Gogh has been the prototype of the brilliant, tortured artist who is unappreciated in his own time.
A prototype is an early sample, model, or release of a product built to test a concept or process.[1] It is a term used in a variety of contexts, including semantics, design, electronics, and software programming. A prototype is generally used to evaluate a new design to enhance precision by system analysts and users.[2][3] Prototyping serves to provide specifications for a real, working system rather than a theoretical one.[4] Physical prototyping has a long history, and paper prototyping and virtual prototyping now extensively complement it. In some design workflow models, creating a prototype (a process sometimes called materialization) is the step between the formalization and the evaluation of an idea.[5]
A prototype can also mean a typical example of something such as in the use of the derivation 'prototypical'.[6] This is a useful term in identifying objects, behaviours and concepts which are considered the accepted norm and is analogous with terms such as stereotypes and archetypes.
Engineers and prototype specialists attempt to minimize the impact of these differences on the intended role for the prototype. For example, if a visual prototype is not able to use the same materials as the final product, they will attempt to substitute materials with properties that closely simulate the intended final materials.
Prototypes represent some compromise from the final production design. This is due to the skill and choices of the designer(s), and the inevitable inherent limitations of a prototype. Due to differences in materials, processes and design fidelity, it is possible that a prototype may fail to perform acceptably although the production design may have been sound. Conversely, prototypes may perform acceptably but the production design and outcome may prove unsuccessful.
In general, it can be expected that individual prototype costs will be substantially greater than the final production costs due to inefficiencies in materials and processes. Prototypes are also used to revise the design for the purposes of reducing costs through optimization and refinement.[17]
In technology research, a technology demonstrator is a prototype serving as proof-of-concept and demonstration model for a new technology or future product, proving its viability and illustrating conceivable applications.
In large development projects, a testbed is a platform and prototype development environment for rigorous experimentation and testing of new technologies, components, scientific theories and computational tools.[18]
The most common use of the word prototype is a functional, although experimental, version of a non-military machine (e.g., automobiles, domestic appliances, consumer electronics) whose designers would like to have built by mass production means, as opposed to a mockup, which is an inert representation of a machine's appearance, often made of some non-durable substance.
However, more and more often the first functional prototype is built on a "prototype PCB" almost identical to the production PCB, as PCB manufacturing prices fall and as many components are not available in DIP packages, but only available in SMT packages optimized for placing on a PCB.
In electronics, prototyping means building an actual circuit to a theoretical design to verify that it works, and to provide a physical platform for debugging it if it does not. The prototype is often constructed using techniques such as wire wrapping or using a breadboard, stripboard or perfboard, with the result being a circuit that is electrically identical to the design but not physically identical to the final product.[20]
Open-source tools like Fritzing exist to document electronic prototypes (especially the breadboard-based ones) and move toward physical production. Prototyping platforms such as Arduino also simplify the task of programming and interacting with a microcontroller.[21] The developer can choose to deploy their invention as-is using the prototyping platform, or replace it with only the microcontroller chip and the circuitry that is relevant to their product.
Prototype software is often referred to as alpha grade, meaning it is the first version to run. Often only a few functions are implemented, the primary focus of the alpha is to have a functional base code on to which features may be added. Once alpha grade software has most of the required features integrated into it, it becomes beta software for testing of the entire software and to adjust the program to respond correctly during situations unforeseen during development.[22]
Often the end users may not be able to provide a complete set of application objectives, detailed input, processing, or output requirements in the initial stage. After the user evaluation, another prototype will be built based on feedback from users, and again the cycle returns to customer evaluation. The cycle starts by listening to the user, followed by building or revising a mock-up, and letting the user test the mock-up, then back. There is now a new generation of tools called Application Simulation Software which help quickly simulate application before their development.[23]
A data prototype is a form of functional or working prototype.[27] The justification for its creation is usually a data migration, data integration or application implementation project and the raw materials used as input are an instance of all the relevant data which exists at the start of the project.
To achieve this, a data architect uses a graphical interface to interactively develop and execute transformation and cleansing rules using raw data. The resultant data is then evaluated and the rules refined. Beyond the obvious visual checking of the data on-screen by the data architect, the usual evaluation and validation approaches are to use Data profiling software[28] and then to insert the resultant data into a test version of the target application and trial its use.
When developing software or digital tools that humans interact with, a prototype is an artifact that is used to ask and answer a design question. Prototypes provide the means for examining design problems and evaluating solutions.[29]
In architecture, prototyping refers to either architectural model making (as form of scale modelling) or as part of aesthetic or material experimentation, such as the Forty Wall House open source material prototyping centre in Australia.[34][35]
Architects prototype to test ideas structurally, aesthetically and technically. Whether the prototype works or not is not the primary focus: architectural prototyping is the revelatory process through which the architect gains insight.[36]
In many sciences, from pathology to taxonomy, prototype refers to a disease, species, etc. which sets a good example for the whole category. In biology, prototype is the ancestral or primitive form of a species or other group; an archetype.[37] For example, the Senegal bichir is regarded as the prototypes of its genus, Polypterus.
In programming, inheritance refers to passing down characteristics from a parent to a child so that a new piece of code can reuse and build upon the features of an existing one. JavaScript implements inheritance by using objects. Each object has an internal link to another object called its prototype. That prototype object has a prototype of its own, and so on until an object is reached with null as its prototype. By definition, null has no prototype and acts as the final link in this prototype chain. It is possible to mutate any member of the prototype chain or even swap out the prototype at runtime, so concepts like static dispatching do not exist in JavaScript.
Although classes are now widely adopted and have become a new paradigm in JavaScript, classes do not bring a new inheritance pattern. While classes abstract most of the prototypal mechanism away, understanding how prototypes work under the hood is still useful.
JavaScript objects are dynamic "bags" of properties (referred to as own properties). JavaScript objects have a link to a prototype object. When trying to access a property of an object, the property will not only be sought on the object but on the prototype of the object, the prototype of the prototype, and so on until either a property with a matching name is found or the end of the prototype chain is reached.
Note: Following the ECMAScript standard, the notation someObject.[[Prototype]] is used to designate the prototype of someObject. The [[Prototype]] internal slot can be accessed and modified with the Object.getPrototypeOf() and Object.setPrototypeOf() functions respectively. This is equivalent to the JavaScript accessor __proto__ which is non-standard but de-facto implemented by many JavaScript engines. To prevent confusion while keeping it succinct, in our notation we will avoid using obj.__proto__ but use obj.[[Prototype]] instead. This corresponds to Object.getPrototypeOf(obj).
It should not be confused with the func.prototype property of functions, which instead specifies the [[Prototype]] to be assigned to all instances of objects created by the given function when used as a constructor. We will discuss the prototype property of constructor functions in a later section.
There are several ways to specify the [[Prototype]] of an object, which are listed in a later section. For now, we will use the __proto__ syntax for illustration. It's worth noting that the __proto__: ... syntax is different from the obj.__proto__ accessor: the former is standard and not deprecated.
e59dfda104