21 julio 2009

Clases JavaFX

El API de JavaFX ya nos provee de un gran número de clases que podemos usar en nuestras aplicaciones, sin embargo además podemos definir nuestras propias clases, en esta parte nos concentraremos en definir algunas clases y ver que nuevas variantes nos provee este lenguaje.

Una clase se declara usando la keyword class y el nombre de la clase

class Address {
var street: String;
var city: String;
var state: String;
var zip: String;
}
Como podemos observar aquí estamos definiendo la clase Address la cual consta de 4 variables que por ahora al no definir ningún modificador de visibilidad (Próximo tema ;)) tendrá la visibilidad default que se conoce como "script-only". Esto también aplica para la clase ya que no definimos su modificador de visibilidad y solo podrá ser usada desde el mismo script. Un detalle muy importante es que las clases no poseen constructores la manera de crear una instancia de alguna clase es por medio del nombre de la clase y abrir " { ... } " e inicializar las propiedades que nosotros queramos, podemos imaginar esto como que dentro del closure poseemos un Map de propiedades y ahí asignamos sus valores

def address = Address {
street: "1 Main Street";
city: "Santa Clara";
state: "CA";
zip: "95050";
}
Arriba esta la creación de una instancia de la clase Address, en la cual inicializamos sus distintas propiedades.
Clases abstractas
Al igual que en el lenguaje Java podemos definir una clase como abstracta, recordemos que una clase es abstracta si está definida como abstract class ya sea porque tiene uno o mas métodos(Funciones si nos referimos a JavaFX) , así como si no los tuviera y solo marcara la clase como abstracta.

abstract class Account {
var accountNum: Integer;
var balance: Number;

function getBalance(): Number {
return balance;
}

function deposit(amount: Number): Void {
balance += amount;
}

function withdraw(amount: Number): Void {
balance -= amount;
}
}

Aquí acabamos de definir nuestra clase abstracta que provee toda la funcionalidad necesaria pero por algún motivo hemos decidido marcarla como abstracta, igual eso no nos interesa para el ejemplo, pero es bueno aclarar que esta clase podría ser concreta. Para lograr que una clase herede de otra debemos usar la palabra extends
y luego de esto ya podremos agregar más propiedades o sobre escritura de funciones o lo que necesitemos hacer.


class SimpleAccount extends Account {
var hasOverDraftProtection: Boolean;

override function withdraw(amount: Number) : Void {
if(balance-amount < 0 and hasOverDraftProtection){
balance = 0;
} else {
balance -= amount; // may result in negative account balance!
}
}
}

En el ejemplo de SimpleAccount vemos como aplicar herencia, además podemos ver el modificador override que es el encargado de sobrescribir una función, dentro de la misma función que estamos sobrescribiendo vemos como usamos a super para poder acceder a la implementación de la clase padre.

Hasta aquí no hemos encontrado muchas diferencias con Java pero ha llegado el momento de hablar de las clases Mixin.

Clases Mixin
Las clases mixin serian una mezcla de las interfaces Java junto con las clases abstracta ya que están dejan implementar y definir la implementación de las funciones, pero no podemos instanciar clases mixin.

Ejemplo:


package classpkg;

mixin class MyNameMixin {
var firstName = "John";
var lastName = "Doe";
function printName(){
println("My name is: {firstName} {lastName}");
}
}

mixin class MyAddressMixin {
var address = "1 Main Street, Anytown USA";
function printAddress(){
println("My address is: {address}");
}
}

class MyContact extends MyNameMixin, MyAddressMixin { }

def myContact = MyContact{};
myContact.printName();
myContact.printAddress();

En este ejemplo estamos definiendo dos clases mixin las cuales tiene propiedades y funciones propias y aunque no se puede crear nuevas instancias de ellas podemos usarla para lograr una herencia múltiple.

Les dejo una lista de reglas sobre las clases:
  1. Las clases Mixin no pueden ser instanciadas
  2. Las clases Mixin solo pueden heredar de clases Mixin o interfaces
  3. Las clases Mixin permiten extender cualquier numero de interfaces o clases Mixin
  4. Las clases JavaFX solo pueden heredar de una clase JavaFX ya que está basado en Java
Bueno con esto terminamos este post, el proximo tema sera sobre los modificadores de visibilidad, espero se haya entendido todo y no hayan quedados dudas, cualquier cosa comenten

Saludos

4 comentarios:

  1. Excelente, gracias por hacer esta introducción a JavaFX.

    Saludos ^_^

    ResponderEliminar
  2. Magnifico, un excelente post de JavaFX...

    Continua asi, esta muy bien explicado y entendible... XD

    ResponderEliminar
  3. hola... no estoy seguro, pero creo q falta algo de codigo aca??

    class SimpleAccount extends Account {
    var hasOverDraftProtection: Boolean;

    override function withdraw(amount: Number) : Void {
    if(balance-amount <>

    ??, muchos exitos

    ResponderEliminar
  4. Hola como estas,si realmente falta codigo porque el blogger me elimino los <>, disculpa por el error y muchas gracias por avisar.
    Si alguien conoce algun formateador de codigo para el blogger por favor que comente asi los codigos de ejemplos quedan mejor

    Saludos

    ResponderEliminar