From ed5148d7e68e5aa1f4d7599396a1183a2ab875c9 Mon Sep 17 00:00:00 2001 From: flaviut Date: Wed, 16 Jul 2014 20:15:33 -0400 Subject: [PATCH] First draft of OOP --- content/oop.md | 40 ++++++++++++++++++++++++++++++++++++++++ content/toc.md | 2 +- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 content/oop.md diff --git a/content/oop.md b/content/oop.md new file mode 100644 index 0000000..5ee35b1 --- /dev/null +++ b/content/oop.md @@ -0,0 +1,40 @@ +--- +title: Object Oriented Programming +--- + +# Object Oriented Programming + +Object oriented programming is supported through inheritance and `methods`, which are virtual procedures. Methods work in the same was as procs, but when an method is called with an object, the method that is actually run is resolved at runtime and depends on the type of the object. + +Inheritance is created with the `of` keyword in the type declaration of an object. A method is overridden by creating a new method with parameter types of the subtype. + +``` nimrod +type Animal = ref object of TObject + name: string + age: int +method vocalize(this: Animal): string = "..." +method ageHumanYrs(this: Animal): int = this.age + +type Dog = ref object of Animal +method vocalize(this: Dog): string = "woof" +method ageHummanYrs(this: Dog): int = this.age * 7 + +type Cat = ref object of Animal +method vocalize(this: Cat): string = "meow" + + +var animals: seq[Animal] = @[] +animals.add(Dog(name: "Sparky", age: 10)) +animals.add(Cat(name: "Mitten", age: 10)) + +for a in animals: + echo a.vocalize() + echo a.age_human_yrs() +``` +``` console +$ nimrod c -r oop.nim +woof +10 +meow +10 +``` \ No newline at end of file diff --git a/content/toc.md b/content/toc.md index 8717525..202a2a3 100644 --- a/content/toc.md +++ b/content/toc.md @@ -9,7 +9,7 @@ * [Case Statements](/case/) * [For Loops & Iterators](/for_iterators/) * [Procs](/procs/) -* [Object Oriented Programming](/methods/) +* [Object Oriented Programming](/oop/) * [First Class Functions](/procvars/) * [Blocks](/block/) * [Primitive Types](/primitives/)