4 - Cedric

Transcription

4 - Cedric
Les objets, les classes et les méthodes
• Un objet possède une identité propre
(penser aux objets du monde réel : chaise, table ...)
• Ils sont regroupés en classes (distinguer la notion de “chaise” d’une chaise particulière)
• Les classes décrivent les attributs et les méthodes applicables (comment décrire une chaise ? que
peut-on faire avec ?)
Exemple de classe Scala
class Point(var x: Int, var y: Int) {
def move(dx: Int, dy: Int) {
x = x + dx
y = y + dy
}
override def toString(): String = "(" + x + ", " + y + ")";
}
object Test {
def main(args: Array[String]) {
val pt = new Point(1, 2)
println(pt); pt.move(10, 10); println(pt)
}
}
Second constructeur
class Point(var x: Int, var y: Int) {
def this(z: Int) {
this(z,z)
}
def move(dx: Int, dy: Int) {
x = x + dx
y = y + dy
}
override def toString(): String = "(" + x + ", " + y + ")";
}
object Test {
def main(args: Array[String]) {
val pt = new Point(1, 2)
println(pt); pt.move(10, 10); println(pt)
}
}
Méthodes
• En Scala, les paramètres du constructeur sont donnés avec la déclaration de la classe.
• Comme en Java, dans une classe C, toute méthode possède un paramètre supplémentaire implicite,
appelé this, de type C.
• Comme en Java, un appel à f, se note par exemple : o.f(arg)
Si f était une fonction C, on écrirait f(o, arg)
Un appel de la forme f(arg) correspond en fait à this.f(arg)
• Il n’y a pas de méthode statique en Scala, elles doivent être regroupées dans une “classe singleton”
qui est déclarée par le mot-clé object.
La même classe en Java
class Point {
Integer x; Integer y;
Point(Integer x, Integer y) {
this.x = x; this.y = y;
}
public void move(dx: Int, dy: Int) {
x = x + dx; y = y + dy;
}
@override
public String toString() {
return "(" + x + ", " + y + ")";
}
public void main(String[] args) {
Point pt = new Point(1, 2);
println(pt); pt.move(10, 10); println(pt);
}
}
Généralisation/spécialisation et héritage
• Une classe Scala peut spécialiser une autre classe
• Elle hérite alors des attributs et des méthodes de sa super-classe.
On parle donc d’héritage dans les langages objet.
• La conversion de type entre une classe et sa super-classe est implicite.
• Les méthodes et attributs visibles sont donnés par les types des variables ou des expressions.
• Les méthodes peuvent être redéfinies (mot-clé override).
• La methode executée et celle de la classe de l’objet (celle a été utilisée au moment de la création
avec New).
Exemple
Classes Person et Employee en Scala
class Person {
var firstName : String = ""
var lastName : String = ""
}
class Employee extends Person {
var job : String = ""
}
object Test {
val p : Person = new Employee
}
... avec les constructeurs
class Person(var firstName: String, var lastName: String) {}
class Employee(firstName: String, lastName: String, var job :
String) extends Person(firstName, lastName) {}
object Test {
val p : Person = new Employee
}
Exemple : figures géométriques
Hiérarchie de classes
(diagramme extrait de la documentation)