Classes: Difference between revisions

m
syntax highlighting fixup automation
(added MiniZinc example)
m (syntax highlighting fixup automation)
Line 39:
 
=={{header|11l}}==
<langsyntaxhighlight lang=11l>T MyType
Int public_variable // member variable = instance variable
. Int private_variable
Line 48:
F someMethod() // member function = method
.private_variable = 1
.public_variable = 10</langsyntaxhighlight>
 
Note that member functions in 11l by default are not polymorphic; if you want a polymorphic member function, you have to mark it as virtual. Example:
<langsyntaxhighlight lang=11l>T MyType
F.virtual.new someMethod() -> N // this is polymorphic
print()</langsyntaxhighlight>
 
=={{header|ActionScript}}==
<langsyntaxhighlight lang=actionscript>package {
public class MyClass {
Line 76:
}
}
}</langsyntaxhighlight>
 
=={{header|Ada}}==
Line 82:
 
A package specification has the following form:
<langsyntaxhighlight lang=ada>package My_Package is
type My_Type is tagged private;
procedure Some_Procedure(Item : out My_Type);
Line 90:
Variable : Integer := -12;
end record;
end My_Package;</langsyntaxhighlight>
The type declaration at the top of the package gives public visibility to the private tagged type My_Type. Since My_Type is declared to be private, the public has no visibility of its structure. The type must be treated as a black box. The private section of the package specification includes the actual tagged record definition. Note that the data member Variable is initialized to -12. This corresponds to a default constructor for the type.
 
The package body must contain the implementation of the procedures and functions declared in the package specification.
<langsyntaxhighlight lang=ada> package body My_Package is
procedure Some_Procedure(Item : out My_Type) is
begin
Line 106:
return Temp;
end Set;
end My_Package;</langsyntaxhighlight>
The Set function acts as a conversion constructor for My_Type.
 
An instance is typically created outside the package:
<langsyntaxhighlight lang=ada>with My_Package; use My_Package;
 
procedure Main is
Line 117:
Some_Procedure(Foo); -- Foo is doubled
Foo := Set(2007); -- Foo.Variable is set to 2007
end Main;</langsyntaxhighlight>
 
=={{header|Aikido}}==
Aikido provides classes with single inheritance and multiple interface implementation. A class takes a set of constructor arguments and provides a set of public functions, operators, classes, monitors and threads.
<langsyntaxhighlight lang=aikido>class Circle (radius, x, y) extends Shape (x, y) implements Drawable {
var myvec = new Vector (x, y)
 
Line 127:
// draw the circle
}
}</langsyntaxhighlight>
 
=={{header|ALGOL 68}}==
Line 141:
Other examples of this experimental approach are located at pages: [[Life in two dimensions#ALGOL 68|Life in two dimensions]], [[Playing Cards#ALGOL 68|Playing Cards]] and [[Stack#ALGOL 68|Stack]].
 
<langsyntaxhighlight lang=algol68>MODE MYDATA = STRUCT(
INT name1
);
Line 222:
print (((name OF person2), ": ",
(gender OF person2|(STRING gender):gender|attribute error), " "));
print (((age OF person2|(INT age):age|attribute error), new line)) # "Jane Female 23" #</langsyntaxhighlight>
{{out}}
<pre>
Line 230:
 
=={{header|AmigaE}}==
<langsyntaxhighlight lang=amigae>OBJECT a_class
varA, varP
ENDOBJECT
Line 256:
WriteF('\d\n', obj.getP())
END obj
ENDPROC</langsyntaxhighlight>
 
=={{header|AutoHotkey}}==
{{works with|AutoHotkey_L}}
AutoHotkey_L is prototype-based. However, for convenience, class-syntax may be used to create a base object.
<langsyntaxhighlight lang=AutoHotkey>obj := new MyClass
obj.WhenCreated()
 
Line 279:
MsgBox, % "Object created at " this.time " on " this.date
}
}</langsyntaxhighlight>
 
=={{header|BaCon}}==
Line 285:
This is an '''advanced feature''' to extend the the compiler we can also compile using g++ or clang++ using PRAGMA
 
<langsyntaxhighlight lang=cpp>
PRAGMA COMPILER g++
PRAGMA OPTIONS -Wno-write-strings -Wno-pointer-arith -fpermissive
Line 320:
PRINT "Book subject : ", Book1.subject FORMAT "%s%s\n"
PRINT "Book book_id : ", Book1.book_id FORMAT "%s%d\n"
</syntaxhighlight>
</lang>
 
 
Now the same but using the c++ "new" command and arrow operators syntax
 
<langsyntaxhighlight lang=cpp>
PRAGMA COMPILER g++
PRAGMA OPTIONS -Wno-write-strings -Wno-pointer-arith -fpermissive
Line 360:
PRINT "Book subject : ", Book1->subject FORMAT "%s%s\n"
PRINT "Book book_id : ", Book1->book_id FORMAT "%s%d\n"
</syntaxhighlight>
</lang>
 
=={{header|BASIC}}==
{{works with|QuickBasic|4.5}}
<langsyntaxhighlight lang=basic> DECLARE SUB MyClassDelete (pthis AS MyClass)
DECLARE SUB MyClassSomeMethod (pthis AS MyClass)
DECLARE SUB MyClassInit (pthis AS MyClass)
Line 382:
SUB MyClassSomeMethod (pthis AS MyClass)
pthis.Variable = 1
END SUB</langsyntaxhighlight>
 
=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
<langsyntaxhighlight lang=bbcbasic> INSTALL @lib$+"CLASSLIB"
REM Declare the class:
Line 403:
REM Discard the instance:
PROC_discard(myclass{})</langsyntaxhighlight>
 
=={{header|BQN}}==
Line 409:
Classes with a constructor can be defined in BQN with the help of a namespace. All data members are immutable(private) and can only be modified with the help of exported functions. Exported variables can be accessed, but they cannot be mutated(this may change in the future).
 
<langsyntaxhighlight lang=bqn>ExClass ← {
𝕊 value: # Constructor portion
priv ← value
Line 421:
obj.DispPriv@
obj.ChangePriv 6
obj.DispPriv@</langsyntaxhighlight>
 
=={{header|blz}}==
<langsyntaxhighlight lang=blz>
# Constructors can take parameters (that automatically become properties)
constructor Ball(color, radius)
Line 441:
print(red_ball)
# => a red ball with radius 2
</syntaxhighlight>
</lang>
 
=={{header|Bracmat}}==
Bracmat has no class-inheritance. Any object can function as a template for creating other objects.
<langsyntaxhighlight lang=bracmat>( ( resolution
= (x=)
(y=)
Line 452:
& new$(resolution,640,480):?VGA
& new$(resolution,1920,1080):?1080p
& out$("VGA: horizontal " !(VGA..x) " vertical " !(VGA..y)));</langsyntaxhighlight>
{{out}}
<pre>VGA: horizontal 640 vertical 480</pre>
Line 458:
=={{header|C}}==
{{works with|gcc|4.0.2}}
<syntaxhighlight lang=c>
<lang c>
#include <stdlib.h>
 
Line 489:
MyClass obj = MyClass_new();
MyClass_someMethod(obj);
MyClass_delete(&obj);</langsyntaxhighlight>
 
=={{header|C sharp|C#}}==
<langsyntaxhighlight lang=csharp>public class MyClass
{
public MyClass()
Line 517:
System.Console.WriteLine( "Variable=" + instance.Variable.ToString() );
}
}</langsyntaxhighlight>
 
=={{header|C++}}==
{{works with|g++|4.0.2}}
<langsyntaxhighlight lang=cpp>class MyClass
{
public:
Line 549:
MyClass* pInstance = new MyClass;
// Instances allocated with new must be explicitly destroyed when not needed any more:
delete pInstance;</langsyntaxhighlight>
 
Note: <tt>MyClass instance();</tt> would ''not'' define an instance, but declare a function returning an instance. Accidentally declaring functions when object definitions are wanted is a rather common bug in C++.
Line 555:
Functions can also be defined inline:
 
<langsyntaxhighlight lang=cpp>class MyClass
{
public:
Line 562:
private:
int variable;
};</langsyntaxhighlight>
 
Note that member functions in C++ by default are ''not'' polymorphic; if you want a polymorphic member function, you have to mark it as virtual. In that case, you should also add a virtual destructor, even if that is empty. Example:
 
<langsyntaxhighlight lang=cpp>class MyClass
{
public:
virtual void someMethod(); // this is polymorphic
virtual ~MyClass(); // destructor
};</langsyntaxhighlight>
 
=={{header|Clojure}}==
Line 577:
 
defrecord example:
<langsyntaxhighlight lang=clojure>
; You can think of this as an interface
(defprotocol Foo (getFoo [this]))
Line 586:
; Create instance and invoke our method to return field value
(-> (Example1. "Hi") .getFoo)
"Hi"</langsyntaxhighlight>
 
=={{header|COBOL}}==
<!-- This took far too long to create and to get to compile. -->
<langsyntaxhighlight lang=cobol> IDENTIFICATION DIVISION.
CLASS-ID. my-class INHERITS base.
Line 655:
.
END PROGRAM example-class-use.</langsyntaxhighlight>
 
=={{header|Coco}}==
<langsyntaxhighlight lang=coco>class Rectangle
# The constructor is defined as a bare function. This
# constructor accepts one argument and automatically assigns it
Line 672:
# Instantiate the class using the 'new' operator.
rect = new Rectangle 2</langsyntaxhighlight>
 
=={{header|CoffeeScript}}==
<langsyntaxhighlight lang=coffeescript># Create a basic class
class Rectangle
# Constructor that accepts one argument
Line 688:
 
# Instantiate the class using the new operator
rect = new Rectangle 2</langsyntaxhighlight>
 
=={{header|Common Lisp}}==
<langsyntaxhighlight lang=lisp>(defclass circle ()
((radius :initarg :radius
:initform 1.0
Line 702:
> (defvar *c* (make-instance 'circle :radius 2))
> (area *c*)
12.566370614359172d0</langsyntaxhighlight>
 
=={{header|Component Pascal}}==
Line 708:
 
Module that defines a Class
<langsyntaxhighlight lang=oberon2>
MODULE Point;
IMPORT
Line 750:
END ToString;
END Point.
</syntaxhighlight>
</lang>
Module that uses previous class
<langsyntaxhighlight lang=oberon2>
MODULE DrivePoint;
IMPORT
Line 770:
 
END DrivePoint.
</syntaxhighlight>
</lang>
Execute: ^Q DrivePoint.Do<br/>
{{out}}
Line 781:
=={{header|Crystal}}==
{{trans|Ruby}}
<langsyntaxhighlight lang=crystal>class MyClass
def initialize
Line 794:
my_class = MyClass.new
</syntaxhighlight>
</lang>
 
=={{header|D}}==
<langsyntaxhighlight lang=d>import std.stdio;
 
class MyClass {
Line 839:
// prints 'variable = 99'
writeln("variable = ", obj.variable);
}</langsyntaxhighlight>
 
=={{header|Delphi}}==
<langsyntaxhighlight lang=Delphi>program SampleClass;
 
{$APPTYPE CONSOLE}
Line 885:
lMyClass.Free;
end;
end.</langsyntaxhighlight>
 
=={{header|DM}}==
Line 891:
Adding elements (procs, variables, classes) to this tree is done by defining the name and such.
 
<syntaxhighlight lang =DM>s</langsyntaxhighlight>
 
This declares a type "/s" at the root of the tree, which can now be instantiated.
Line 897:
A more complicated example:
 
<syntaxhighlight lang=DM>
<lang DM>
// Declare the class "/foo"
foo
Line 920:
x.bar = 10 // Assign to the instance variable.
x.baz() // Call "baz" on our instance.
</syntaxhighlight>
</lang>
 
This is enough to declare a
 
=={{header|Dragon}}==
<langsyntaxhighlight lang=dragon>class run{
func val(){
showln 10+20
}
}
</syntaxhighlight>
</lang>
 
=={{header|DWScript}}==
Methods can be implemented inline or out-of-line, this sample illustrates both.
<langsyntaxhighlight lang=Delphi>type
TMyClass = class
private
Line 958:
 
lMyClass.SomeField := 99;
lMyClass.SomeMethod;</langsyntaxhighlight>
 
=={{header|E}}==
In E, classes, constructors, and instance variables are not built into the language. This is an example of the basic convention; different cases may call for objects built in different ways.
 
<langsyntaxhighlight lang=e>def makeColor(name :String) {
def color {
to colorize(thing :String) {
Line 970:
}
return color
}</langsyntaxhighlight>
 
Example interactive session creating and using it:
 
<langsyntaxhighlight lang=e>? def red := makeColor("red")
# value: <color>
 
? red.colorize("apple")
# value: "red apple"</langsyntaxhighlight>
 
=={{header|EchoLisp}}==
<langsyntaxhighlight lang=lisp>
(lib 'gloops) ; load oo library
 
Line 994:
(lambda (p w) (printf " From %a (age %d). Dear writer of %a ..." p p.age w.books )))
 
</syntaxhighlight>
</lang>
{{Output}}
<langsyntaxhighlight lang=lisp>
;; instantiate
(define simone (make-instance Person :name 'simone :age 42)) ;; slots values by name
Line 1,013:
From 🎩 simon to️ 🚶 albert : ...
From 🎩 simon (age 66). Dear writer of (my-life my-bike) ...
</syntaxhighlight>
</lang>
 
=={{header|Eiffel}}==
=== The Most Basic Form of Class ===
The shortest way to write an Eiffel class is to have the class keyword, followed by the name of the class (all caps), and ending with the end keyword.
<langsyntaxhighlight lang=Eiffel>
class MY_CLASS
end
</syntaxhighlight>
</lang>
 
=== Add a Creation Procedure (Constructor) ===
<langsyntaxhighlight lang=Eiffel>
class MY_CLASS
 
Line 1,039:
 
end
</syntaxhighlight>
</lang>
=== Add Multiple Creation Procedures (Constructors) ===
In Eiffel, you may have more than one creation procedure (or "Constructor").
<langsyntaxhighlight lang=Eiffel>
class MY_CLASS
 
Line 1,086:
 
end
</syntaxhighlight>
</lang>
 
=== Add some Properties & Methods ===
Below, we've added three attributes (i.e. "Properties"). The "make" is not only a "Constructor" (Creation Procedure), but also an example of a "Method".
<langsyntaxhighlight lang=Eiffel>
class MY_CLASS
 
Line 1,139:
 
end
</syntaxhighlight>
</lang>
 
=={{header|Elena}}==
ELENA 4.x :
<langsyntaxhighlight lang=elena>import extensions;
class MyClass
Line 1,169:
// get the variable
console.printLine("Variable=",instance.Variable)
}</langsyntaxhighlight>
 
=={{header|ERRE}}==
ERRE isn't OOP-oriented, but with new PC version 3.0 is possibile to define classes and instance variables, like in this example:
<langsyntaxhighlight lang=ERRE>PROGRAM CLASS2_DEMO
 
CLASS QUADRATO
Line 1,203:
PRINT(PERIMETROQ)
END PROGRAM
</syntaxhighlight>
</lang>
The answers is
100
Line 1,210:
=={{header|F_Sharp|F#}}==
A minimal example as required by the task description:
<langsyntaxhighlight lang=fsharp>type MyClass(init) = // constructor with one argument: init
let mutable var = init // a private instance variable
member x.Method() = // a simple method
Line 1,218:
// create an instance and use it
let myObject = new MyClass(42)
myObject.Method()</langsyntaxhighlight>
 
A somewhat more meaningful example, inspired by the Haskell version:
<langsyntaxhighlight lang=fsharp>open System
 
type Shape =
Line 1,235:
interface Shape with
member x.Perimeter() = 2.0 * width + 2.0 * height
member x.Area() = width * height</langsyntaxhighlight>
 
=={{header|Factor}}==
<langsyntaxhighlight lang=factor>TUPLE: my-class foo bar baz ;
M: my-class quux foo>> 20 + ;
C: <my-class> my-class
Line 1,245:
C: <my-child-class> my-child-class
M: my-child-class foobar 20 >>quux ;
20 20 30 <my-child-class> foobar quux ! result: 30</langsyntaxhighlight>
 
=={{header|Falcon}}==
Falcon classes are a mix of data and code that can be used to instantiate objects. Classes are defined below. Note: inh1...inhN can also be passed the param_list.
<langsyntaxhighlight lang=falcon>class class_name[ ( param_list ) ] [ from inh1[, inh2, ..., inhN] ]
[ static block ]
[ properties declaration ]
[init block]
[method list]
end</langsyntaxhighlight>
Example of a class:
<langsyntaxhighlight lang=falcon>class mailbox( max_msg )
capacity = max_msg * 10
Line 1,270:
end
end</langsyntaxhighlight>
 
Instantiation:
<langsyntaxhighlight lang=falcon>m = mailbox( 10 )
// Ouputs: Box now ready for 100 messages.</langsyntaxhighlight>
 
=={{header|Fancy}}==
<langsyntaxhighlight lang=fancy>class MyClass {
read_slot: 'instance_var # creates getter method for @instance_var
@@class_var = []
Line 1,302:
}
 
myclass = MyClass new</langsyntaxhighlight>
 
=={{header|Fantom}}==
<langsyntaxhighlight lang=Fantom>class MyClass
{
// an instance variable
Line 1,331:
c := MyClass { x = 3 } // instantiates the class, sets x to 3
}
}</langsyntaxhighlight>
 
=={{header|Forth}}==
Line 1,339:
Declare a class
 
<langsyntaxhighlight lang=forth>:class MyClass <super Object
 
int memvar
Line 1,352:
:m show: ( -- ) ." Memvar = " memvar . ;m
 
;class</langsyntaxhighlight>
 
Allocate a static object
<syntaxhighlight lang =forth>MyClass newInstance</langsyntaxhighlight>
 
Allocate a dynamic object, saving its pointer in a global variable.
<syntaxhighlight lang =forth>New> MyClass value newInstance</langsyntaxhighlight>
 
Call member functions
<langsyntaxhighlight lang=forth>10 set: newInstance
show: newInstance</langsyntaxhighlight>
 
Free a dynamically allocated object
 
<langsyntaxhighlight lang=forth>newInstance dispose
0 to newInstance \ no dangling pointers!</langsyntaxhighlight>
 
Example of dynamic allocation and local variable use"
 
<langsyntaxhighlight lang=forth>: test { \ obj -- }
New> MyClass to obj
show: obj
1000 set: obj
obj dispose ;</langsyntaxhighlight>
 
 
Line 1,382:
Needs the FMS-SI (single inheritance) library code located here:
http://soton.mpeforth.com/flag/fms/index.html
<langsyntaxhighlight lang=forth>include FMS-SI.f
 
:class foo \ begin class foo definition
Line 1,413:
bar \ 10 30
bar' \ 10 30
</syntaxhighlight>
</lang>
 
=={{header|Fortran}}==
Creating abstract derived type (abstract class), extended derived types, using constructor and finalization, pointers etc. Works with gfortran 5.0 and intel ifort 15.0.2
 
<langsyntaxhighlight lang=fortran>
!-----------------------------------------------------------------------
!Module accuracy defines precision and some constants
Line 1,598:
end program rosetta_class
 
</syntaxhighlight>
</lang>
 
=={{header|FreeBASIC}}==
<langsyntaxhighlight lang=freebasic>' FB 1.05.0 Win64
 
Type MyClass
Line 1,627:
Print mc.MyInt, mc.Treble()
Print "Press any key to quit the program"
Sleep</langsyntaxhighlight>
 
{{out}}
Line 1,636:
=={{header|GLSL}}==
There are no classes in GLSL, but they can be simulated using structs:
<langsyntaxhighlight lang=glsl>
struct Rectangle{
float width;
Line 1,656:
return (self.width+self.height)*2.0;
}
</syntaxhighlight>
</lang>
 
=={{header|Go}}==
The task describes several concepts concerning class methods before giving some task requirements. The following code satisfies the task requirements. The concepts described however, are more involved. A discussion of these concepts follows.
<langsyntaxhighlight lang=go>package main
 
import "fmt"
Line 1,709:
fmt.Println(forTwo)
fmt.Println(forToo)
}</langsyntaxhighlight>
{{out}}
<pre>
Line 1,732:
 
This happens when a method is called through an interface. Consider this code in addition to the example above.
<langsyntaxhighlight lang=go>import reflect
 
type happinessTester interface {
Line 1,757:
ps.happy())
}
}</langsyntaxhighlight>
On the last line, in the call to ps.happy(), ps is of the interface type happinessTester. The method actually called is based on the underlying concrete type.
For the method call, this is called the receiver type and the variable b (in both happy methods) is called the receiver. Dispatch is based on this single receiver so Go is a single dispatch kind of language.
Line 1,778:
=={{header|Groovy}}==
A class:
<langsyntaxhighlight lang=groovy>/** Ye olde classe declaration */
class Stuff {
/** Heare bee anne instance variable declared */
Line 1,792:
println "This stuff is flangulating its guts: ${guts}"
}
}</langsyntaxhighlight>
 
A demonstration:
<langsyntaxhighlight lang=groovy>def stuff = new Stuff('''
I have made mistakes in the past.
I have made mistakes in the future.
Line 1,810:
'''
 
stuff.flangulate()</langsyntaxhighlight>
 
{{out}}
Line 1,828:
Hence, the usual approach to object-oriented programming, in which the actual method invoked by a method call isn't determined until runtime (think of C++'s virtual functions), is impossible in Haskell 98.
Haskell's type classes allow for polymorphic functions, but all the polymorphism happens at compile-time (think of C++ templates) without the use of language extensions (existential types).
<langsyntaxhighlight lang=haskell>class Shape a where
perimeter :: a -> Double
area :: a -> Double
Line 1,860:
{- The correct version of apRatio (and hence the correct
implementations of perimeter and area) is chosen based on the type
of the argument. -}</langsyntaxhighlight>
 
The primary way to simulate run-time polymorphism in Haskell is to use a single algebraic data type with multiple constructors, rather than several types belonging to a single class.
 
<langsyntaxhighlight lang=haskell>data Shape = Rectangle Double Double | Circle Double
{- This Shape is a type rather than a type class. Rectangle and
Circle are its constructors. -}
Line 1,886:
{- The value returned by apRatio is determined by the return values
of area and perimeter, which just happen to be defined differently
for Rectangles and Circles. -}</langsyntaxhighlight>
 
== Icon and {{header|Unicon}} ==
Unicon supports classes.
<langsyntaxhighlight lang=Unicon>class Example (x) # 'x' is a field in class
 
# method definition
Line 1,910:
write (x2.x)
write (x2.double ()) # call a method
end</langsyntaxhighlight>
 
=={{header|J}}==
'''Class definition:'''
<langsyntaxhighlight lang=j>coclass 'exampleClass'
 
exampleMethod=: monad define
Line 1,924:
)
 
exampleInstanceVariable=: 0</langsyntaxhighlight>
 
'''Instantiation:'''
<langsyntaxhighlight lang=j> exampleObject=: conew 'exampleClass'</langsyntaxhighlight>
 
Note that all J system defined utilities designed specifically to work on classes and objects have names which begin with the prefix <code>co</code>.
 
=={{header|Java}}==
<langsyntaxhighlight lang=java>public class MyClass{
 
// instance variable
Line 1,950:
this.variable = 1;
}
}</langsyntaxhighlight>
Note: "this." in someMethod is optional. "variable = 1;" works also. If a parameter also named "variable" came into someMethod, using "this" specifies using the instance variable rather than the local method variable. Instantiate this class using:
<syntaxhighlight lang =java>new MyClass();</langsyntaxhighlight>
 
=={{header|JavaScript}}==
Line 1,958:
JavaScript is [[wp:Prototype-based programming|prototype-based]], so it doesn't have classes per se. Thinking in classes when coding JavaScript will only hinder you in the long run, but here's an example of JavaScript OO:
 
<langsyntaxhighlight lang=javascript>//Constructor function.
function Car(brand, weight) {
this.brand = brand;
Line 1,981:
alert(cars[i].brand + " " + cars[i].weight + " " + cars[i].size + ", " +
(cars[i] instanceof Car) + " " + (cars[i] instanceof Truck));
}</langsyntaxhighlight>
The alerts shows us:
<pre>
Line 1,990:
 
===ES6===
<langsyntaxhighlight lang=javascript>class Car {
/**
* A few brands of cars
Line 2,066:
let myTruck = new Truck('Volvo', 2);
console.log(myTruck.formattedStats);
myTruck.drive(40);</langsyntaxhighlight>
 
Output:
Line 2,081:
Multiple dispatch is a core feature of the language.
 
<langsyntaxhighlight lang=julia>abstract type Mammal end
habitat(::Mammal) = "planet Earth"
 
Line 2,100:
for a in arr
println("Habitat of $a: ", habitat(a))
end</langsyntaxhighlight>
 
{{output}}
Line 2,108:
 
=={{header|Kotlin}}==
<langsyntaxhighlight lang=scala>class MyClass(val myInt: Int) {
fun treble(): Int = myInt * 3
}
Line 2,115:
val mc = MyClass(24)
print("${mc.myInt}, ${mc.treble()}")
}</langsyntaxhighlight>
 
{{out}}
Line 2,125:
In Lasso, a "class" is termed a "type"
 
<langsyntaxhighlight lang=Lasso>
define mytype => type {
data
Line 2,144:
local(x = mytype)
#x->val = '99 Bottles of beer'
#x->asString // outputs 'has a value of: "99 Bottles of beer" and a rand number of "48"'</langsyntaxhighlight>
 
=={{header|LFE}}==
 
<langsyntaxhighlight lang=lisp>
(defmodule simple-object
(export all))
Line 2,180:
"Get a variable passed when constructing the object."
(funcall (get-method object 'species) object))
</syntaxhighlight>
</lang>
 
Usage from the LFE REPL:
<langsyntaxhighlight lang=lisp>
> (slurp '"simple-object.lfe")
#(ok simple-object)
Line 2,192:
> (get-species my-fish)
"Carp"
</syntaxhighlight>
</lang>
 
=={{header|Lingo}}==
'''Class definition:'''
<langsyntaxhighlight lang=lingo>----------------------------------------
-- @desc Class "MyClass"
-- @file parent script "MyClass"
Line 2,214:
me._myvar = me._myvar * 2
put me._myvar
end</langsyntaxhighlight>
 
'''Instantiation:'''
<langsyntaxhighlight lang=lingo>foo = script("MyClass").new()
foo.doubleAndPrint()
-- 46</langsyntaxhighlight>
 
=={{header|Lisaac}}==
<langsyntaxhighlight lang=Lisaac>Section Header
 
+ name := SAMPLE;
Line 2,245:
sample := SAMPLE.clone;
sample.some_method;
);</langsyntaxhighlight>
 
=={{header|Logtalk}}==
The definition of classes in Logtalk require the use of meta-classes. In order to avoid infinite regression, we use here the usual trick of making a class an instance of itself. The class meta-class holds the constructor method, allowing the class to accept a message for creating a new instance. The class itself defines the methods and variables of its instances.
<langsyntaxhighlight lang=logtalk>:- object(metaclass,
instantiates(metaclass)).
 
Line 2,268:
:- private(state/1).
 
:- end_object.</langsyntaxhighlight>
A simple usage example after compiling and loading the above code:
<langsyntaxhighlight lang=logtalk>| ?- class::new(Instance, 1).
Instance = o1
yes
Line 2,276:
| ?- o1::method(Value).
Value = 1
yes</langsyntaxhighlight>
 
=={{header|Lua}}==
Classes in Lua are implemented with metatables. This doesn't implement a full system, but it gets the basic idea:
<langsyntaxhighlight lang=lua>myclass = setmetatable({
__index = function(z,i) return myclass[i] end, --this makes class variables a possibility
setvar = function(z, n) z.var = n end
Line 2,293:
instance:setvar(6)
 
print(instance.var) -->6</langsyntaxhighlight>
 
=={{header|M2000 Interpreter}}==
<langsyntaxhighlight lang=M2000 Interpreter>
Class zz {
module bb {
Line 2,500:
Print pr2=>toString$()
 
</syntaxhighlight>
</lang>
 
=={{header|MATLAB}}==
Line 2,510:
 
GenericClass.m: Class Constructor
<langsyntaxhighlight lang=MATLAB>function GenericClassInstance = GenericClass(varargin)
 
if isempty(varargin) %No input arguments
Line 2,521:
GenericClassInstance = class(GenericClassInstance,'GenericClass');
end</langsyntaxhighlight>
getValue.m:
<langsyntaxhighlight lang=MATLAB>%Get function
function value = getValue(GenericClassInstance)
value = GenericClassInstance.classVariable;
end</langsyntaxhighlight>
setValue.m:
<langsyntaxhighlight lang=MATLAB>%Set function
function GenericClassInstance = setValue(GenericClassInstance,newValue)
GenericClassInstance.classVariable = newValue;
end</langsyntaxhighlight>
display.m: This method overloads the "disp()" command
<langsyntaxhighlight lang=MATLAB>function display(GenericClassInstance)
disp(sprintf('%f',GenericClassInstance.classVariable));
end</langsyntaxhighlight>
 
Sample Usage:
<langsyntaxhighlight lang=MATLAB>>> myClass = GenericClass(3)
3.000000
>> myClass = setValue(myClass,pi)
Line 2,546:
ans =
 
3.141592653589793</langsyntaxhighlight>
 
@GenericClass2
GenericClass2.m: This is the classdef, it includes the class constructor as well as class variables and methods.
<langsyntaxhighlight lang=MATLAB>classdef GenericClass2
properties
Line 2,577:
end %methods
end</langsyntaxhighlight>
getValue.m:
<langsyntaxhighlight lang=MATLAB>%Get function
function value = getValue(GenericClassInstance)
value = GenericClassInstance.classVariable;
end</langsyntaxhighlight>
display.m: This method overloads the "disp()" command
<langsyntaxhighlight lang=MATLAB>function display(GenericClassInstance)
disp(sprintf('%f',GenericClassInstance.classVariable));
end</langsyntaxhighlight>
 
Sample Usage:
<langsyntaxhighlight lang=MATLAB>>> myClass = GenericClass2(3)
3.000000
>> setValue(myClass,pi)
Line 2,596:
ans =
 
3.141592653589793</langsyntaxhighlight>
 
=={{header|MiniScript}}==
<langsyntaxhighlight lang=MiniScript>// MiniScript is prototype based
Weapon = { "name": "Sword", "damage": 3 }
Weapon.slice = function()
Line 2,609:
wep.name = "Lance"
 
wep.slice</langsyntaxhighlight>
 
=={{header|MiniZinc}}==
MiniZinc does not have classes, but they can be simulated using functions with constraints:
<langsyntaxhighlight lang=minizinc>% define a Rectangle "class"
var int: Rectangle(var int: width, var int: height) =
let {
Line 2,640:
 
% print the area of the rectangle
output [show(area1),"\n"];</langsyntaxhighlight>
=={{header|Nanoquery}}==
<langsyntaxhighlight lang=nanoquery>class MyClass
declare name
Line 2,659:
// display the name value
println inst.getName()</langsyntaxhighlight>
 
=={{header|Nemerle}}==
<langsyntaxhighlight lang=Nemerle>public class MyClass
{
public this() { } // the constructor in Nemerle is always named 'this'
Line 2,680:
def myInstance = MyClass(); // no 'new' keyword needed
myInstance.MyVariable = 42; // set MyVariable
System.Console.WriteLine($"My variable is $(myInstance.MyVariable)") // get MyVariable</langsyntaxhighlight>
 
=={{header|NetRexx}}==
<langsyntaxhighlight lang=rexx>class ClassExample
 
properties private -- class scope
Line 2,713:
method test(s=boolean)
mies = 3
say s mies</langsyntaxhighlight>
 
=={{header|Nim}}==
{{trans|Python}}
<langsyntaxhighlight lang=nim>type MyClass = object
name: int
 
Line 2,743:
echo person1.name, " ", person1.gender, " ", person1.age # Jane female 50
var person2 = initMyOtherClass("John", male, 23)
echo person2.name, " ", person2.gender, " ", person2.age # John male 23</langsyntaxhighlight>
 
=={{header|Oberon-2}}==
{{works with|OO2C|2.1.11}}
<langsyntaxhighlight lang=oberon2>MODULE M;
 
TYPE
Line 2,768:
END Increment;
 
END M.</langsyntaxhighlight>
 
Exported procedures are marked with an asterisk (*). There is nothing special about the constructor New, it is just a function that returns a new object of type T. The name of the method receiver can also be chosen freely. INC is a predeclared procedure that increments its argument.
 
=={{header|Objeck}}==
<langsyntaxhighlight lang=objeck>bundle Default {
class MyClass {
@var : Int;
Line 2,805:
}
}
}</langsyntaxhighlight>
 
=={{header|Object Pascal}}==
Line 2,811:
:''Note: This is not part of standard Pascal, but Turbo Pascal specific''
 
<langsyntaxhighlight lang=pascal>type
MyClass = object
variable: integer;
Line 2,845:
instance.done;
dispose(pInstance, done);
end;</langsyntaxhighlight>
 
=={{header|Objective-C}}==
Line 2,852:
{{works with|GNUstep}}
Interface:
<langsyntaxhighlight lang=objc>// There are no class variables, so static variables are used.
static int myClassVariable = 0;
 
Line 2,862:
- (int)variable; // Typical accessor - you should use the same name as the variable
 
@end</langsyntaxhighlight>
 
Implementation:
 
<langsyntaxhighlight lang=objc>@implementation MyClass
 
// Was not declared because init is defined in NSObject
Line 2,882:
}
 
@end</langsyntaxhighlight>
 
Using the class:
 
<langsyntaxhighlight lang=objc>// Creating an instance
MyClass *mc = [[MyClass alloc] init];
 
// Sending a message
[mc variable];</langsyntaxhighlight>
 
=={{header|OCaml}}==
<langsyntaxhighlight lang=ocaml>class my_class =
object (self)
val mutable variable = 0
method some_method = variable <- 1
end</langsyntaxhighlight>
 
Using the class:
Line 2,909:
=={{header|Oforth}}==
Class creation
<langsyntaxhighlight lang=Oforth>Object Class new: MyClass(att)
MyClass method: initialize(v) v := att ;</langsyntaxhighlight>
 
Usage : instantiation
<syntaxhighlight lang =Oforth>MyClass new("some value")</langsyntaxhighlight>
 
=={{header|Ol}}==
Line 2,922:
problems, methods can only access variables at the level of the class hierarchy they are defined. ::attribute directives create setter and getter methods that allow instance variables to be accessed in other contexts.
 
<langsyntaxhighlight lang=ooRexx>p = .point~new
c = .circle~new
 
Line 2,950:
::method print
expose radius
say "A circle of radius" radius "centered at location ("||self~x","self~y")"</langsyntaxhighlight>
 
=={{header|OxygenBasic}}==
 
<langsyntaxhighlight lang=oxygenbasic>
 
Class MyObject
Line 2,984:
 
del v
</syntaxhighlight>
</lang>
 
=={{header|Oz}}==
Classes are created at runtime and first-class values.
<langsyntaxhighlight lang=oz>declare
class Something
feat
Line 3,011:
 
%% call a method
{Object increase}</langsyntaxhighlight>
 
=={{header|Pascal}}==
Line 3,019:
{{works with|Perl|5.8.6}}
The implementation (there are no declarations) of a class using the [http://search.cpan.org/perldoc?perlobj standard] object system:
<langsyntaxhighlight lang=perl>{
# a class is a package (i.e. a namespace) with methods in it
package MyClass;
Line 3,037:
$self->{variable} = 1;
}
}</langsyntaxhighlight>
 
This is the same using the [http://search.cpan.org/perldoc?Moose Moose] object system:
<langsyntaxhighlight lang=perl>{
package MyClass;
use Moose;
Line 3,051:
$self->variable(1);
}
}</langsyntaxhighlight>
 
This is the same class using the [http://search.cpan.org/perldoc?MooseX::Declare MooseX::Declare] extention:
<langsyntaxhighlight lang=perl>use MooseX::Declare;
class MyClass {
has 'variable' => (is => 'rw', default => 0);
Line 3,060:
$self->variable(1);
}
}</langsyntaxhighlight>
 
All of the above classes can be used the same way:
<langsyntaxhighlight lang=perl>my $instance = MyClass->new; # invoke constructor method
 
$instance->some_method; # invoke method on object instance
# instance deallocates when the last reference falls out of scope</langsyntaxhighlight>
 
=={{header|Phix}}==
{{libheader|Phix/Class}}
<!--<langsyntaxhighlight lang=Phix>(notonline)-->
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span> <span style="color: #000080;font-style:italic;">-- (else cffi namespaces error, classes not supported by pwa/p2js anyway)</span>
<span style="color: #7060A8;">requires</span> <span style="color: #0000FF;">(</span><span style="color: #008000;">"1.0.2"</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- (free up the temp used in the v.show() call)</span>
Line 3,099:
<span style="color: #000000;">v</span><span style="color: #0000FF;">.</span><span style="color: #000000;">show</span><span style="color: #0000FF;">()</span>
<span style="color: #000000;">v</span><span style="color: #0000FF;">=</span><span style="color: #004600;">NULL</span>
<!--</langsyntaxhighlight>-->
{{out}}
<pre>
Line 3,111:
=={{header|PHL}}==
 
<langsyntaxhighlight lang=phl>module classes;
 
extern printf;
Line 3,133:
printf("obj.myField: %i\n", obj::get_myField);
return 0;
]</langsyntaxhighlight>
 
=={{header|PHP}}==
<langsyntaxhighlight lang=php>class MyClass {
public static $classVar;
public $instanceVar; // can also initialize it here
Line 3,147:
}
}
$myObj = new MyClass();</langsyntaxhighlight>
<!-- TODO ;; 2008-01-24 07:35 fill this in when i get a few spare moments
/*
Line 3,169:
 
=={{header|PicoLisp}}==
<langsyntaxhighlight lang=PicoLisp>(class +Rectangle)
# dx dy
 
Line 3,176:
 
(println # Create a rectangle, and print its area
(area> (new '(+Rectangle) 'dx 3 'dy 4)) )</langsyntaxhighlight>
 
=={{header|Pop11}}==
Object system is implemented as a library, so we must first load it.
<langsyntaxhighlight lang=pop11>uses objectclass;
define :class MyClass;
slot value = 1;
enddefine;</langsyntaxhighlight>
 
Defining class MyClass automatically defines two constructors, newMyClass and consMyClass and slot (instance variable) accessors, so we can immediately start using our new class:
 
<langsyntaxhighlight lang=pop11>;;; Construct instance with default slot values
lvars instance1 = newMyClass();
;;; Construct instance with explicitely given slot values
Line 3,199:
12 -> value(instance1);
;;; Print it
value(instance1) =></langsyntaxhighlight>
 
We can add methods at any time (even after creating an instance):
 
<langsyntaxhighlight lang=pop11>define :method reset(x : MyClass);
0 -> value(x);
enddefine;
reset(instance1);
;;; Print it
instance1 =></langsyntaxhighlight>
 
=={{header|Portugol}}==
{{trans|D}}
<langsyntaxhighlight lang=Portugol>
programa {
inclua biblioteca Objetos --> obj
Line 3,255:
}
 
</syntaxhighlight>
</lang>
 
=={{header|PowerShell}}==
{{works with|PowerShell|2}}
Prior to PowerShell 5, native class definition was not supported in PowerShell. But you could define classes in PowerShell using C#, JavaScript, or VisualBasic.
<langsyntaxhighlight lang=powershell>
Add-Type -Language CSharp -TypeDefinition @'
public class MyClass
Line 3,289:
}
'@
</syntaxhighlight>
</lang>
{{works with|PowerShell|5}}
<br>
<b>Basic syntax</b>
<langsyntaxhighlight lang=PowerShell>
class MyClass
{
Line 3,311:
}
}
</syntaxhighlight>
</lang>
<b>Example class</b>
<langsyntaxhighlight lang=PowerShell>
class Banana
{
Line 3,347:
}
}
</syntaxhighlight>
</lang>
<b>Using the example class</b>
<langsyntaxhighlight lang=PowerShell>
$MyBanana = [banana]::New()
$YourBanana = [banana]::New( $True )
Line 3,355:
If ( -not $MyBanana.IsReadyToEat() -and $YourBanana.IsReadyToEat() )
{ $MySecondBanana = $YourBanana }
</syntaxhighlight>
</lang>
 
=={{header|Processing}}==
<langsyntaxhighlight lang=java>class ProgrammingLanguage
{
// instance variable:
Line 3,374:
// the method has no argument or local variable called "name", so we can omit the "this"
}
}</langsyntaxhighlight>
How to use it:
<langsyntaxhighlight lang=java>// instantiate the class:
ProgrammingLanguage processing = new ProgrammingLanguage("Processing");
 
// call the method:
processing.sayHello();</langsyntaxhighlight>
{{out}}
<pre>Hello from the programming language Processing</pre>
Line 3,386:
=={{header|PureBasic}}==
===Generic version===
<langsyntaxhighlight lang=PureBasic>Interface OO_Interface ; Interface for any value of this type
Get.i()
Set(Value.i)
Line 3,441:
*Foo\Set(341)
MessageRequester("Info", "Foo = " + *Foo\ToString() )
*Foo\Destroy()</langsyntaxhighlight>
 
===Simple OOP Version===
Using the open-source precompiler [http://www.development-lounge.de/viewtopic.php?t=5915 SimpleOOP].
<langsyntaxhighlight lang=PureBasic>Class Foo
Private Value.i
Line 3,474:
*Demo.foo = NewObject.foo()
*Demo\Set(4)
MessageRequester("Info", "Val= " + *Demo\ToString())</langsyntaxhighlight>
 
=={{header|Python}}==
<langsyntaxhighlight lang=python>class MyClass:
name2 = 2 # Class attribute
 
Line 3,514:
print person1.age # Raises AttributeError exception!
person2 = MyOtherClass("Jane", "Female", 23)
print person2.name, person2.gender, person2.age # "Jane Female 23"</langsyntaxhighlight>
 
Python allows for very flexible argument passing including normal named parameters, defaulted/optional named parameters, up to one "varargs" tuple, and any number of keywords arguments (which are all passed in the form of a single dictionary (associative array), and any non-ambiguous combination of these). All types of argument passing for functions can also be used for object instantiation/initialization (passed to the special ''__init__()'' method) as shown.
Line 3,520:
New-style classes inherit from "object" or any descendant of the "object" class:
 
<langsyntaxhighlight lang=python>class MyClass(object):
...</langsyntaxhighlight>
 
These "new-style" classes support some features which were unavailable in "classic classes". New features include a ''__new__()'' with lower level control over object instantiation, metaclass support, static methods, class methods, "properties" (managed attributes) and "slots" (attribute restrictions).
Line 3,530:
===S3===
S3 provides a very simple class system designed to be easily used interactively.
<langsyntaxhighlight lang=R>#You define a class simply by setting the class attribute of an object
circS3 <- list(radius=5.5, centre=c(3, 4.2))
class(circS3) <- "circle"
Line 3,542:
type="l", ...)
}
plot(circS3)</langsyntaxhighlight>
 
===S4===
S4 is a more formal class system that provides validity checking and a way to define different methods for different input signatures.
<langsyntaxhighlight lang=R>setClass("circle",
representation(
radius="numeric",
Line 3,569:
type="l", ...)
})
plot(circS4)</langsyntaxhighlight>
 
=={{header|Racket}}==
Line 3,575:
Racket programs heavily use functions, but classes and objects are available as well:
 
<langsyntaxhighlight lang=racket>
#lang racket
 
Line 3,591:
;; constructing an instance
(new fish% [size 50])
</syntaxhighlight>
</lang>
 
=={{header|Raku}}==
(formerly Perl 6)
{{works with|Rakudo|2015.12}}
<syntaxhighlight lang=raku perl6line>class Camel { has Int $.humps = 1; }
 
my Camel $a .= new;
Line 3,602:
 
my Camel $b .= new: humps => 2;
say $b.humps;</langsyntaxhighlight>
 
A more complex example:
 
<syntaxhighlight lang=raku perl6line>class Butterfly {
has Int $!age; # With the ! twigil, no public accessor method is generated
has Str $.name;
Line 3,631:
my Butterfly $b .= new(name => 'Osgood', age => 4);
say "Name: {$b.name}, Color: {$b.color}";
$b.flap;</langsyntaxhighlight>
 
=={{header|RapidQ}}==
<langsyntaxhighlight lang=rapidq>TYPE MyClass EXTENDS QObject
Variable AS INTEGER
 
Line 3,650:
 
' invoke the method
instance.someMethod</langsyntaxhighlight>
 
=={{header|Raven}}==
Build classes:
<langsyntaxhighlight lang=raven>class Alpha
'I am Alpha.' as greeting
define say_hello
Line 3,660:
 
class Beta extend Alpha
'I am Beta!' as greeting</langsyntaxhighlight>
 
Execute classes to create objects:
<langsyntaxhighlight lang=raven>Alpha as alpha
Beta as beta</langsyntaxhighlight>
 
Call methods:
<langsyntaxhighlight lang=raven>alpha.say_hello
beta.say_hello</langsyntaxhighlight>
 
Result:
<langsyntaxhighlight lang=raven>I am Alpha.
I am Beta!</langsyntaxhighlight>
 
=={{header|REALbasic}}==
This class "contains" a number ('TheNumber'). The Number methods allow read and write access to the number, and provide an example of method overloading as well as use of the "Assigns" keyword.
 
<syntaxhighlight lang=vb>
<lang vb>
Class NumberContainer
Private TheNumber As Integer
Line 3,692:
End Sub
End Class
</syntaxhighlight>
</lang>
 
<syntaxhighlight lang=vb>
<lang vb>
Dim num As New NumberContainer(1) ' call the constructor
num.Number = num.Number + 5 ' call both Number methods
</syntaxhighlight>
</lang>
 
=={{header|REBOL}}==
<langsyntaxhighlight lang=REBOL>rebol [
Title: "Classes"
URL: http://rosettacode.org/wiki/Classes
Line 3,738:
 
print "Howdy, Pecos!" pecos/hi
print "Tell us about yourself?" pecos/boast</langsyntaxhighlight>
 
{{out}}
Line 3,756:
Simple program to define class and create an object
 
<langsyntaxhighlight lang=ring>
New point { x=10 y=20 z=30 print() }
Class Point x y z func print see x + nl + y + nl + z + nl
</syntaxhighlight>
</lang>
 
The previous program can be written in another way
 
<langsyntaxhighlight lang=ring>
New point # create new object using the point class
{ # access the new object attributes and methods
Line 3,779:
y + nl + # print the y attribute
z + nl # print the z attribute
</syntaxhighlight>
</lang>
 
=={{header|Ruby}}==
<langsyntaxhighlight lang=ruby>class MyClass
def initialize
Line 3,795:
my_class = MyClass.new #allocates an object and calls it's initialize method, then returns it.
</syntaxhighlight>
</lang>
 
=={{header|Rust}}==
<langsyntaxhighlight lang=rust>
struct MyClass {
variable: i32, // member variable = instance variable
Line 3,829:
// Both instances are automatically deleted when their scope ends.
}
</syntaxhighlight>
</lang>
 
=={{header|Sather}}==
<langsyntaxhighlight lang=sather>class CLASSTEST is
readonly attr x:INT; -- give a public getter, not a setter
private attr y:INT; -- no getter, no setter
Line 3,852:
return y + s;
end;
end;</langsyntaxhighlight>
 
<langsyntaxhighlight lang=sather>class MAIN is
main is
test ::= #CLASSTEST(1, 2, 3);
Line 3,865:
#OUT + test.getPrivateY(0) + "\n";
end;
end;</langsyntaxhighlight>
 
=={{header|Scala}}==
Scala can be highly object-oriented and if so the task is trivial. In some cases the constructor and instance variables do not have to be explicitly declared; this example shows two ways each to make constructors and instance variables.
<langsyntaxhighlight lang=Scala>/** This class implicitly includes a constructor which accepts an Int and
* creates "val variable1: Int" with that value.
*/
Line 3,892:
println(m.myMethod) // prints 0
println(n.myMethod) // prints 3
}</langsyntaxhighlight>
 
=={{header|Scheme}}==
From [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-20.html#%_sec_3.1.1 Structure and Interpretation of Computer Programs]
<langsyntaxhighlight lang=Scheme> (define (withdraw amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
Line 3,909:
(else (error "Unknown request -- MAKE-ACCOUNT"
m))))
dispatch)</langsyntaxhighlight>
 
=={{header|Sidef}}==
<langsyntaxhighlight lang=ruby>class MyClass(instance_var) {
method add(num) {
instance_var += num;
Line 3,920:
var obj = MyClass(3); # `instance_var` will be set to 3
obj.add(5); # calls the add() method
say obj.instance_var; # prints the value of `instance_var`: 8</langsyntaxhighlight>
 
=={{header|Simula}}==
As the first object-oriented language, Simula introduced both the term <tt>class</tt> and the <tt>object.method(arguments)</tt> syntax that many other languages on this page employ. Notice that the object must be declared using <tt>ref</tt> (reference, i.e. pointer) before it can be instantiated.
<langsyntaxhighlight lang=simula>BEGIN
CLASS MyClass(instanceVariable);
INTEGER instanceVariable;
Line 3,942:
myObject :- NEW MyClass(5);
myObject.doMyMethod(2)
END</langsyntaxhighlight>
{{out}}
<pre> 5 + 2 = 7</pre>
Line 3,948:
=={{header|Slate}}==
Slate objects operate as prototypes with multi-methods:
<langsyntaxhighlight lang=slate>prototypes define: #MyPrototype &parents: {Cloneable} &slots: #(instanceVar).
MyPrototype traits addSlot: #classVar.
 
Line 3,959:
[
x instanceVar = 1 /\ (x classVar = 3)
].</langsyntaxhighlight>
 
=={{header|Smalltalk}}==
<langsyntaxhighlight lang=smalltalk>Object subclass: #MyClass
instanceVariableNames: 'instanceVar'
classVariableNames: 'classVar'
Line 3,976:
^self instanceVar = 1; classVar = 3 ! !
 
MyClass new someMethod!</langsyntaxhighlight>
 
=={{header|SuperCollider}}==
<langsyntaxhighlight lang=SuperCollider>
 
 
Line 4,015:
 
 
</syntaxhighlight>
</lang>
 
Call it:
 
<langsyntaxhighlight lang=SuperCollider>
SpecialObject.randomizeAll;
a = SpecialObject(8);
a.coordinates;
</syntaxhighlight>
</lang>
 
=={{header|Swift}}==
<langsyntaxhighlight lang=swift>class MyClass{
 
// stored property
Line 4,044:
self.variable = 1
}
}</langsyntaxhighlight>
Instantiate this class using:
<syntaxhighlight lang =swift>MyClass()</langsyntaxhighlight>
 
=={{header|Tcl}}==
{{works with|Tcl|8.6}} or {{libheader|TclOO}}
<langsyntaxhighlight lang=Tcl>package require TclOO
oo::class create summation {
variable v
Line 4,071:
puts "Add $i to get [$sum add $i]"
}
$sum destroy</langsyntaxhighlight>
 
=={{header|TIScript}}==
TIScript is [[wp:Prototype-based programming|prototype-based]] and yet it has classes. Object that was created as an instance of one class can be transformed to the instance of another class by changing its obj.prototype field.
 
<langsyntaxhighlight lang=javascript>class Car
{
//Constructor function.
Line 4,110:
stdout.printf("#%d %s $%d %v %v, %v %v", i, car.brand, car.price, car.weight, car.size,
car instanceof Car, car instanceof Truck);
}</langsyntaxhighlight>
{{out}} from console :
<pre>
Line 4,118:
 
=={{header|Transd}}==
<langsyntaxhighlight lang=Scheme>#lang transd
 
class Point : {
Line 4,141:
(for p in v do (print p))
) )
}</langsyntaxhighlight>
{{out}}
<pre>
Line 4,150:
 
=={{header|TXR}}==
<langsyntaxhighlight lang=txrlisp>(defstruct shape ()
cached-area
 
Line 4,173:
 
(:method calc-area (self)
(* self.length self.length)))</langsyntaxhighlight>
 
{{out}}
Line 4,199:
{{works with|ksh93}}
ksh93 has "type variables" which essentially declares a class.
<langsyntaxhighlight lang=bash>typeset -T Summation_t=(
integer sum
 
Line 4,217:
s.add $i
done
print ${s.sum}</langsyntaxhighlight>
 
=={{header|Vala}}==
<langsyntaxhighlight lang=vala>public class MyClass : Object {
// Instance variable
public int variable;
Line 4,242:
instance.variable = 84;
print("%d\n", instance.variable);
}</langsyntaxhighlight>
 
=={{header|VBA}}==
Line 4,254:
This is the contents of a class module "Foo" (like in the Visual Basic .NET example below):
 
<langsyntaxhighlight lang=vb>Private Const m_default = 10
Private m_bar As Integer
 
Line 4,284:
'Note: instead of using the instance variable m_bar we could refer to the Bar property of this object using the special word "Me":
' MultiplyBar = Me.Bar * x
End Function</langsyntaxhighlight>
 
===Using an object===
Objects (e.g. of class Foo) are created and used in "normal" modules.
<langsyntaxhighlight lang=vb>Public Sub foodemo()
'declare and create separately
Dim f As Foo
Line 4,324:
'this will trigger one or two "object destroyed" messages
'depending on whether f0 was created...
End Sub</langsyntaxhighlight>
 
{{out}}
Line 4,339:
=={{header|Visual Basic .NET}}==
===Defining a class===
<langsyntaxhighlight lang=vbnet>Class Foo
Private m_Bar As Integer
 
Line 4,367:
End Function
 
End Class</langsyntaxhighlight>
 
===Using an object===
<langsyntaxhighlight lang=vbnet>'Declare and create separately
Dim foo1 As Foo
foo1 = New Foo
Line 4,391:
'Reading/writing properties
Console.WriteLine(foo4.Bar)
foo4.Bar = 1000</langsyntaxhighlight>
 
=={{header|Visual FoxPro}}==
Visual FoxPro has a large number of base classes - Session is one of them.
<langsyntaxhighlight lang=vfp>
LOCAL o1 As MyClass, o2 As MyClass
*!* Instantiate o1
Line 4,424:
ENDPROC
ENDDEFINE
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 4,432:
 
=={{header|Wren}}==
<langsyntaxhighlight lang=ecmascript>class Bear {
// Constructs a Bear instance passing it a name
// which is stored in the field _name
Line 4,452:
System.print("The bear is called %(b.name).")
// Make a noise.
b.makeNoise()</langsyntaxhighlight>
 
{{out}}
Line 4,463:
===UASM 2.52===
Details about the UASM class extention can be found [http://www.terraspace.co.uk/uasm252_ext.pdf here].
<langsyntaxhighlight lang=asm>
option casemap:none
 
Line 4,537:
 
end
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 4,544:
 
=={{header|XBS}}==
<langsyntaxhighlight lang=XBS>class Person {
construct=func(self,Name,Age,Gender){
self:Name=Name;
Line 4,558:
log(John::ToString());
set Jane = new Person with ["Jane",20,"Female"]
log(Jane::ToString());</langsyntaxhighlight>
{{out}}
<pre>
Line 4,566:
 
=={{header|XLISP}}==
<langsyntaxhighlight lang=xlisp>(DEFINE-CLASS PROGRAMMING-LANGUAGE
(INSTANCE-VARIABLES NAME YEAR))
 
Line 4,584:
 
(DISPLAY (LISP 'DESCRIBE))
(NEWLINE)</langsyntaxhighlight>
{{out}}
<pre>(THE PROGRAMMING LANGUAGE LISP WAS CREATED IN 1958)</pre>
 
=={{header|zkl}}==
<langsyntaxhighlight lang=zkl>class C{ // define class named "C", no parents or attributes
println("starting construction"); // all code outside functions is wrapped into the constructor
var v; // instance data for this class
Line 4,598:
c1:=C(5); // create a new instance of C
c2:=c1("hoho"); // create another instance of C
println(C.v," ",c1.v," ",c2.v);</langsyntaxhighlight>
{{out}}
<pre>
Line 4,607:
Void 5 hoho
</pre>
<langsyntaxhighlight lang=zkl>C.__constructor(); // run base class constructor for giggles
C.init(456); // initialize base class without creating instance
println(C.v," ",c1.v);</langsyntaxhighlight>
{{out}}
<pre>
Line 4,650:
 
=={{header|zonnon}}==
<langsyntaxhighlight lang=zonnon>
module Graphics;
type
Line 4,693:
writeln("Abs: ":4,p.Abs():3," Ord: ":5,p.Ord():3);
end Main.
</syntaxhighlight>
</lang>
{{out}}
<pre>
10,327

edits