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
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 valoresclass Address {
var street: String;
var city: String;
var state: String;
var zip: String;
}
Arriba esta la creación de una instancia de la clase Address, en la cual inicializamos sus distintas propiedades.def address = Address {
street: "1 Main Street";
city: "Santa Clara";
state: "CA";
zip: "95050";
}
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:
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
Excelente, gracias por hacer esta introducción a JavaFX.
ResponderEliminarSaludos ^_^
Magnifico, un excelente post de JavaFX...
ResponderEliminarContinua asi, esta muy bien explicado y entendible... XD
hola... no estoy seguro, pero creo q falta algo de codigo aca??
ResponderEliminarclass SimpleAccount extends Account {
var hasOverDraftProtection: Boolean;
override function withdraw(amount: Number) : Void {
if(balance-amount <>
??, muchos exitos
Hola como estas,si realmente falta codigo porque el blogger me elimino los <>, disculpa por el error y muchas gracias por avisar.
ResponderEliminarSi alguien conoce algun formateador de codigo para el blogger por favor que comente asi los codigos de ejemplos quedan mejor
Saludos