O ColdFusion 9 traz uma grande implementação na linguagem, quanto a OOP, os componentes ColdFusion agora podem ser escritos inteiramente SEM TAGS, e a invocação destes componentes são realizadas através dos operadores NEW e IMPORT, onde o método init é reconhecido como construtor, e com o métodos getters e settres implícitos, ou seja, você não precisa escrever.
Para exemplificar, peço licença a Hal Helms, mas fiz uma releitura do artigo de Using Inheritance and Composition in ColdFusion Components. Não vou reescreve-lo por completo, vou refazer apenas as classes, todo o restante do texto ainda é atual, então leia o artigo do Hal.
Na parte que fala de herança, a classes Vehicle.cfc fica da seguinte forma:
displayname=”Vehicle”
hint=”I am a Vehicle”
output=”false”
{
property Numeric mph;
public Vehicle function init()
output=”false”
hint=”I am constructor”
{
Variables.mph = 0;
return this;
}
public Numeric function increaseSpeed(Numeric mph)
output=”false”
hint=”I increase speed”
{
Variables.mph = Variables.mph + Arguments.mph;
return Variables.mph;
}
public Numeric function decreaseSpeed(Numeric mph)
output=”true”
hint=”I decrease speed”
{
if(Variables.mph >
Variables.mph = Variables.mph – Arguments.mph;
} else {
stop();
}
return Variables.mph;
}
public void function stop()
output=”true”
{
Variables.mph = 0;
writeoutput(“Your vehicle has stopped.
“);
}
}
E a classe Car.cfc que extende de Vehicle, fica assim:
displayname=”Vehicle”
hint=”I am a Vehicle”
output=”false”
{
property Numeric mph;
public Vehicle function init()
output=”false”
hint=”I am constructor”
{
Variables.mph = 0;
return this;
}
public Numeric function increaseSpeed(Numeric mph)
output=”false”
hint=”I increase speed”
{
Variables.mph = Variables.mph + Arguments.mph;
return Variables.mph;
}
public Numeric function decreaseSpeed(Numeric mph)
e output=”true”
hint=”I decrease speed”
{
if(Variables.mph >
Variables.mph = Variables.mph – Arguments.mph;
} else {
stop();
}
return Variables.mph;
}
public void function stop()
output=”true”
{
Variables.mph = 0;
writeoutput(“Your vehicle has stopped.
“);
}
}
d#
“);
return local.currentSpeed;
}
public void function stop()
output=”true”
{
super.stop();
}
}
e o teste das classes, TestCar.cfm, da seguinte forma:
<cfscript>
import CF9Demo.com.pcsilva.demo.machine.Car;
myCar = new Car();
myCar.stepOnGas();
myCar.stepOnGas();
myCar.stepOnGas();
myCar.stepOnGas();
myCar.stepOnBrakes();
myCar.stepOnBrakes();
myCar.stepOnBrakes();
myCar.stop();
</cfscript>
Obtendo o seguinte resultado:
Na parte que Hal fala de composição, a classe Address.cfc fica da seguinte forma:
displayname=”Address”
hint=”I am an Address”
{
property String address1;
property String address2;
property String city;
property String province;
property String postalCode;
public Address function init()
output=”false”
hint=”I am constructor”
{
return this;
}
}
A classe Person.cfc, assim:
displayname=”Person”
hint=”I am a Person”
{
property String firstName;
property String lastName;
property Address address;
public Person function init()
output=”false”
hint=”I am constructor”
{
return this;
}
}
O formulário de teste é o mesmo, a pagina de processamento do formulário é que deve ser alterada:
<cfscript>
add = new CF9Demo.com.pcsilva.demo.people.Address();
add.setAddress1(form.add1);
add.setAddress2(form.add2);
add.setCity(form.city);
add.setProvince(form.province);
add.setPostalCode(form.postalCode);
user = new CF9Demo.com.pcsilva.demo.people.Person();
user.setFirstName(form.firstName);
user.setLastName(form.lastName);
user.setAddress(add);
<cfscript>
<cfdump var=”#user#”>
Onde obtemos o seguinte print na tela.
Estas são algumas das novidades do ColdFusion 9, acompanhem esta semana estarei mostrando mais.
–
Pedro Claudio
Adobe User Group Manager – CFUG-BR
Adobe Certified Expert
Adobe Certified Professional
http://blog.pcsilva.com/en
http://twitter.com/pcsilva
Tags Marcadas: Este artigo não possui tags marcadas.




ShareThis