Part 08 - Classes
| Definition: Class A cohesive package that consists of a particular kind of compile-time metadata. A class describes the rules by which objects behave. A class specifies the structure of data which each instance contains as well as the methods (functions) which manipulate the data of the object. |
| Definition: Object An instance of a class |
Defining a Class
Classes are important because they allow you to split up your code into simpler, logical parts. They also allow for better organization and data manipulation.
This declares a blank class called "Cat". It can't do anything at all, because there's nothing to do with it. fluffy
| Recommendation Name all your |
Fields and Properties
| Definition: Field An element in a |
| Definition: Property A syntax nicety to use instead of getter/setter functions. |
Simply, fields hold information and properies are accessors to that information.
class Cat:declares the start of aclass.[Property(Name)]declares apropertyaround_name. You named theproperty"Name"._name as stringdeclares afieldofCatthat is astringcalled_name.
fluffy = Cat()declares an instance ofCat.fluffy.Name = 'Fluffy'accesses thepropertyNameofCatand sets its value to'Fluffy'. This will causeNameto set_nameto'Fluffy'.
Fields are not set directly because of security.
| Recommendation Name all your |
There are two other types of properties, a getter and a setter. Technically, a regular property is just the combination of the two.
Meowster
If you were to try to assign a value to fluffy.Name or retrieve a value from fluffy.FavoriteFood, an error would have occurred, because the code just does not exist for you to do that.
Using the attributes Property, Getter, and Setter are very handy, but it's actually Boo's shortened version of what is really happening. Here's an example of the full code.
Because fields are visible inside their own class, you can see that Name is just a wrapper around _name. Using this expanded syntax is handy if you want to do extra verification or not have it wrap exactly around its field, maybe by trimming whitespace or something like that first.
value is a special keyword for the setter statement, that contains the value to be assigned.
| Property Pre-condition It is also possible to define a precondition that must be met before setting a value directly through the Property shorthand. property example |
Class Modifiers
Modifier |
Description |
|---|---|
|
Creates a normal, public class, fully accessible to all other types. |
|
Creates a class that is only accessible by its containing class (the class this was declared in) and any inheriting classes. |
|
A class only accessible by the assembly it was declared in. |
|
Combination of protected and internal. |
|
Creates a class that is only accessible by its containing class (the class this was declared in.) |
|
Creates a class that cannot be instanced. This is designed to be a base class for others. |
|
Creates a class that cannot be inherited from. |
| Recommendation Never use the |
The abstract keyword is the Class Modifier.
Inheritance
| Definition: Inheritance A way to form new classes (instances of which will be objects) using pre-defined objects or classes where new ones simply take over old ones's implemetions and characterstics. It is intended to help reuse of existing code with little or no modification. |
Inheritance is very simple in Boo.
This causes Cat to inherit from Feline. This gives the members Weight and _weight to Cat, even though they were not declared in Cat itself.
You can also have more than one class inherit from the same class, which promotes code reuse.
More about inheritance is covered in Part 10 - Polymorphism, or Inherited Methods
Classes can inherit from one or zero other classes and any number of interfaces.
To inherit from more than one interface, you would use the notation class Child(IBaseOne, IBaseTwo, IBaseThree):
Interfaces
| Definition: Interface An interface defines a list of methods that enables a class to implement the interface itself. |
Interfaces allow you to set up an API (Application Programming Interface) for classes to base themselves off of.
No implementation of code is put inside interfaces, that is up to the classes.
Interfaces can inherit from any number of other interfaces. They cannot inherit from any classes.
This defines IFeline having one method, Roar, and one property, Name. Properties must be explicitly declared in interfaces. Methods are explained in Part 09 - Methods.
| Recommendation Name your interfaces using PascalCase prefixed with the letter I, such as IFeline. |
Difference between Value and Reference Types
There are two types in the Boo/.NET world: Value and Reference types. All classes form Reference types. Numbers and such as was discussed in Part 02 - Variables#List of Value Types are value types.
| Definition: null A keyword used to specify an undefined value for reference variables. |
Value types can never be set to null, they will always have a default value. Numbers default value will generally be 0.
Exercises
- Create a
classthat inherits from more than oneinterface. - See what happens if you try to inherit from more than one
class.
Go on to Part 09 - Methods

1 Comment
Hide/Show CommentsOct 09, 2007
Magnus Henoch
"Fields are not set directly because of security." - what is the security issue? It seems to me that the reason to use properties is encapsulation, hiding implementation details to those who shouldn't rely on them.