Play Video
1
Neurons or nerve cells - Structure function and types of neurons | Human Anatomy | 3D Biology
Neurons or nerve cells - Structure function and types of neurons | Human Anatomy | 3D Biology
::2013/04/27::
Play Video
2
Structure & Types of Neurons by Professor Fink
Structure & Types of Neurons by Professor Fink
::2012/07/19::
Play Video
3
Evolving JavaScript with TypeScript
Evolving JavaScript with TypeScript
::2014/12/01::
Play Video
4
Revit Structure Basics, Grids, Columns, Beams and Beam Systems
Revit Structure Basics, Grids, Columns, Beams and Beam Systems
::2011/01/24::
Play Video
5
How Nervous System Works
How Nervous System Works
::2014/01/04::
Play Video
6
Chemistry - Liquids and Solids (32 of 59) Crystal Structure: Seven Types of Unit Cells
Chemistry - Liquids and Solids (32 of 59) Crystal Structure: Seven Types of Unit Cells
::2014/02/03::
Play Video
7
Class 11-Zoology-Structural Organization in Animals-Online-NEET Lectures
Class 11-Zoology-Structural Organization in Animals-Online-NEET Lectures
::2013/04/05::
Play Video
8
Biology Structural Organization Animals part 22 (Earthworm: circulatory System) CBSE class 11 XI
Biology Structural Organization Animals part 22 (Earthworm: circulatory System) CBSE class 11 XI
::2014/12/16::
Play Video
9
Biology Structural Organization Animals part 4 (Types of Epithelium) CBSE class 11 XI
Biology Structural Organization Animals part 4 (Types of Epithelium) CBSE class 11 XI
::2014/12/12::
Play Video
10
Structural Controls: Market-Based Algorithm
Structural Controls: Market-Based Algorithm
::2011/10/25::
Play Video
11
Biology Structural Organization Animals part 30 (cockroach: Digestive System) CBSE class 11 XI
Biology Structural Organization Animals part 30 (cockroach: Digestive System) CBSE class 11 XI
::2014/12/18::
Play Video
12
Precast Structural System for Salman Bay Housing Project, Jeddah
Precast Structural System for Salman Bay Housing Project, Jeddah
::2012/02/16::
Play Video
13
The Structural Basis of Congenital Disorder of Glycosylation Type 1a
The Structural Basis of Congenital Disorder of Glycosylation Type 1a
::2013/04/22::
Play Video
14
Biology Structural Organization Animals part 33 (cockroach: Reproductive System) CBSE class 11 XI
Biology Structural Organization Animals part 33 (cockroach: Reproductive System) CBSE class 11 XI
::2014/12/19::
Play Video
15
Biology Video: Learn about Human Skeleton
Biology Video: Learn about Human Skeleton
::2012/11/26::
Play Video
16
Microbiology - Viruses (Structure, Types and Bacteriophage Replication)
Microbiology - Viruses (Structure, Types and Bacteriophage Replication)
::2013/08/05::
Play Video
17
Biology Structural Organization Animals part 38 (Frog: Reproductive system) CBSE class 11 XI
Biology Structural Organization Animals part 38 (Frog: Reproductive system) CBSE class 11 XI
::2014/12/19::
Play Video
18
Submarine Structure & Systems: "The Submarine: Construction" 1955 US Navy
Submarine Structure & Systems: "The Submarine: Construction" 1955 US Navy
::2014/10/07::
Play Video
19
IMS (Intelligent Seismic Monitoring Structural System)
IMS (Intelligent Seismic Monitoring Structural System)
::2013/10/07::
Play Video
20
Sika Carbodur earthquake-resisting structural strengthening system
Sika Carbodur earthquake-resisting structural strengthening system
::2013/07/02::
Play Video
21
Biology Structural Organization Animals part 36 (Frog: Circulatory System) CBSE class 11 XI
Biology Structural Organization Animals part 36 (Frog: Circulatory System) CBSE class 11 XI
::2014/12/19::
Play Video
22
Biology Structural Organization Animals part 24 (Earthworm: Excretory System) CBSE class 11 XI
Biology Structural Organization Animals part 24 (Earthworm: Excretory System) CBSE class 11 XI
::2014/12/17::
Play Video
23
Biology Structural Organization Animals part 35 (Frog:  Digestive System) CBSE class 11 XI
Biology Structural Organization Animals part 35 (Frog: Digestive System) CBSE class 11 XI
::2014/12/19::
Play Video
24
Load Bearing Wall Framing Basics - Structural Engineering and Home Building Part One
Load Bearing Wall Framing Basics - Structural Engineering and Home Building Part One
::2013/10/03::
Play Video
25
Direct Analysis Method (DAM) - Autodesk Robot Structural Analysis Professional 2015
Direct Analysis Method (DAM) - Autodesk Robot Structural Analysis Professional 2015
::2014/05/05::
Play Video
26
Biology Structural Organization Animals part 14 (Muscular Tissue Types) CBSE class 11 XI
Biology Structural Organization Animals part 14 (Muscular Tissue Types) CBSE class 11 XI
::2014/12/14::
Play Video
27
Bonding Models and Lewis Structures: Crash Course Chemistry #24
Bonding Models and Lewis Structures: Crash Course Chemistry #24
::2013/07/30::
Play Video
28
Lally Lock Structural Column
Lally Lock Structural Column
::2013/03/23::
Play Video
29
TrimBonder: A structural adhesive bonding system for PVC trim board.  Instructions part 4
TrimBonder: A structural adhesive bonding system for PVC trim board. Instructions part 4
::2012/01/16::
Play Video
30
Biology Structural Organization Animals part 10 (Connective tissue type: Blood) CBSE class 11 XI
Biology Structural Organization Animals part 10 (Connective tissue type: Blood) CBSE class 11 XI
::2014/12/12::
Play Video
31
Introduction to the Waffle-Crete Structural Precast Building System
Introduction to the Waffle-Crete Structural Precast Building System
::2010/10/21::
Play Video
32
Collagen - Structure and Function
Collagen - Structure and Function
::2014/01/21::
Play Video
33
Overview of neuron structure
Overview of neuron structure
::2013/09/23::
Play Video
34
Joints and Articulations :  Synovial Joint Movements (08:11)
Joints and Articulations : Synovial Joint Movements (08:11)
::2012/11/22::
Play Video
35
Mod-01 Lec-02 Fixed type offshore structures
Mod-01 Lec-02 Fixed type offshore structures
::2013/06/11::
Play Video
36
Cell Structure and Function
Cell Structure and Function
::2012/11/23::
Play Video
37
Top 10 Design Pattern Interview Questions and Answers Creational,structural,Behavioral
Top 10 Design Pattern Interview Questions and Answers Creational,structural,Behavioral
::2013/11/04::
Play Video
38
Roof Truss Basics - Structural Engineering And Home Building Tips
Roof Truss Basics - Structural Engineering And Home Building Tips
::2012/11/12::
Play Video
39
Deltabeam with Steel Structure
Deltabeam with Steel Structure
::2014/03/05::
Play Video
40
steel conveyor belt systems structural analysis
steel conveyor belt systems structural analysis
::2014/01/16::
Play Video
41
Immunoglobulins Made Simple: Function, Structure, and Types
Immunoglobulins Made Simple: Function, Structure, and Types
::2013/05/31::
Play Video
42
The Four Tissue Types
The Four Tissue Types
::2012/07/16::
Play Video
43
Looking for Signs of Foundation Structural Problems | Tar Heel Basement Systems
Looking for Signs of Foundation Structural Problems | Tar Heel Basement Systems
::2014/03/26::
Play Video
44
8.7.2 Blood Vessel Structure and Function
8.7.2 Blood Vessel Structure and Function
::2011/08/25::
Play Video
45
Biology Structural Organization Animals part 3 (Types Animal tissues: Epithelial) CBSE class 11 XI
Biology Structural Organization Animals part 3 (Types Animal tissues: Epithelial) CBSE class 11 XI
::2014/12/12::
Play Video
46
Joint Classification
Joint Classification
::2012/04/30::
Play Video
47
Animals Cells Structure & Functions Animation Video for Kids
Animals Cells Structure & Functions Animation Video for Kids
::2013/04/21::
Play Video
48
Introduction to Systems Modeling (SysML): Basic Structural Modeling
Introduction to Systems Modeling (SysML): Basic Structural Modeling
::2014/03/05::
Play Video
49
What is a Shear Wall
What is a Shear Wall
::2013/03/27::
Play Video
50
Lecture 1 - Prestressing System
Lecture 1 - Prestressing System
::2007/12/11::
NEXT >>
RESULTS [51 .. 101]
From Wikipedia, the free encyclopedia
Jump to: navigation, search

A structural type system (or property-based type system) is a major class of type system, in which type compatibility and equivalence are determined by the type's actual structure or definition, and not by other characteristics such as its name or place of declaration. Structural systems are used to determine if types are equivalent and whether a type is a subtype of another. It contrasts with nominative systems, where comparisons are based on the names of the types or explicit declarations, and duck typing, in which only the part of the structure accessed at runtime is checked for compatibility.

Description[edit]

In structural typing, a given element is considered to be compatible with another if, for each feature within the second element's type, there is a corresponding and identical feature in the first element's type. Some languages may differ on the details, such as whether the features must match in name. This definition is not symmetric, and includes subtype compatibility. Two types are considered to be identical if each is compatible with the other.

As an example, OCaml uses structural typing on methods for compatibility of object types. Go uses structural typing on methods to determine compatibility of a type with an interface. C++ template functions exhibit structural typing on type arguments. Haxe uses structural typing, although classes are not structurally subtyped.

In languages which support subtype polymorphism, a similar dichotomy can be formed based on how the subtype relationship is defined. One type is a subtype of another if and only if it contains all the features of the base type (or subtypes thereof); the subtype may contain additional features (such as members not present in the base type, or stronger invariants).

There is a distinction between structural substitution for inferred and non-inferred polymorphism. Some languages, such as Haskell, do not substitute structurally in the case where an expected type is declared (i.e. not inferred), e.g. only substitute for functions that are signature-based polymorphic via type inference.[1] Then it is not possible to accidentally subtype a non-inferred type, although it may still be possible to provide an explicit conversion to a non-inferred type, which is invoked implicitly.

Structural subtyping is arguably more flexible than nominative subtyping, as it permits the creation of ad hoc types and protocols; in particular, it permits creation of a type which is a supertype of an existing type, without modifying the definition of the latter. However, this may not be desirable where the programmer wishes to create closed abstractions.

A pitfall of structural typing versus nominative typing is that two separately defined types intended for different purposes, but accidentally holding the same properties (e.g. both composed of a pair of integers), could be considered the same type by the type system, simply because they happen to have identical structure. One way this can be avoided is by creating one algebraic data type for each use.

In 1990, Cook, et al., proved that inheritance is not subtyping in structurally-typed OO languages.[citation needed]

Example[edit]

Objects in OCaml are structurally typed by the names and types of their methods.

Objects can be created directly ("immediate objects") without going through a nominative class. Classes only serve as functions for creating objects.

 # let x =
     object
       val mutable x = 5
       method get_x = x
       method set_x y = x <- y
     end;;
 val x : < get_x : int; set_x : int -> unit > = <obj>

Here the OCaml interactive runtime prints out the inferred type of the object for convenience. You can see that its type (< get_x : int; set_x : int -> unit >) is purely defined by its methods.[clarification needed]

Let's define another object, which has the same methods and types of methods:

 # let y =
     object
       method get_x = 2
       method set_x y = Printf.printf "%d\n" y
     end;;
 val y : < get_x : int; set_x : int -> unit > = <obj>

You can see that OCaml considers them the same type. For example, the equality operator is typed to only take two values of the same type:

 # x = y;;
 - : bool = false

So they must be the same type, or else this wouldn't even type-check. This shows that equivalence of types is structural.

One can define a function that invokes a method:

 # let set_to_10 a = a#set_x 10;;
 val set_to_10 : < set_x : int -> 'a; .. > -> 'a = <fun>

The inferred type for the first argument (< set_x : int -> 'a; .. >) is interesting. The .. means that the first argument can be any object which has a "set_x" method, which takes an int as argument.

So we can use it on object x:

 # set_to_10 x;;
 - : unit = ()

We can make another object that happens to have that method and method type; the other methods are irrelevant:

 # let z =
     object
       method blahblah = 2.5
       method set_x y = Printf.printf "%d\n" y
     end;;
 val z : < blahblah : float; set_x : int -> unit > = <obj>

The "set_to_10" function also works on it:

 # set_to_10 z;;
 10
 - : unit = ()

This shows that compatibility for things like method invocation is determined by structure.

Let us define a type synonym for objects with only a "get_x" method and no other methods:

 # type simpler_obj = < get_x : int >;;
 type simpler_obj = < get_x : int >

Our object x is not of this type; but structurally, x is of a subtype of this type, since x contains a superset of its methods. So we can coerce x to this type:

 # (x :> simpler_obj);;
 - : simpler_obj = <obj>
 # (x :> simpler_obj)#get_x;;
 - : int = 10

But not object z, because it is not a structural subtype:

 # (z :> simpler_obj);;
 This expression cannot be coerced to type simpler_obj = < get_x : int >;
 it has type < blahblah : float; set_x : int -> unit > but is here used with type
   < get_x : int; .. >
 The first object type has no method get_x

This shows that compatibility for widening coercions are structural.

References[edit]

External links[edit]

Wikipedia content is licensed under the GFDL License
Powered by YouTube
MASHPEDIA
LEGAL
  • Mashpedia © 2014