ColdFusion Class – CFC

Introdução

Hoje em dia a programação orientada a objetos – POO é uma realidade. Apesar de muitos desenvolvedores programarem utilizando técnicas tradicionais, ninguém pode negar os benefícios que a POO pode proporcionar ao desenvolvimento de grandes aplicações principalmente quando é necessária uma manutenção ou implementação.

No ColdFusion – CF é possível desenvolver aplicações orientada a objetos ? OO. Em alguns sites falam que o CF possui uma falsa POO, mas neste artigo irei mostrar como utilizar esses recursos de OO.

POO no Java

Classe é a representação de um tipo específico de objeto, composta pela sua descrição, que identifica os atributos e métodos.
Objeto é um tipo abstrato que contém atributos e métodos.
Métodos são procedimentos residentes nos objetos que determinam como eles irão atuar ao receber as mensagens.
Atributos são as características do objeto, como cor e tamanho, uma janela, por exemplo, tem atributos como o modelo, tamanho, abertura simples ou dupla, entre outros.
Subclasse é uma nova classe originada de uma classe maior (classe-pai).
Instância são os objetos de uma classe. Cada objeto utilizado em uma aplicação pertencente a uma classe é uma instância dessa classe.
Encapsulamento é um mecanismo que permite o acesso aos dados do objeto somente através dos métodos desse objeto. Nenhuma outra parte do programa pode operar sobre os dados de nenhum objeto. A comunicação entre os objetos é feita apenas através de mensagens.

Construtores são métodos criados dentro das classes que são executados automaticamente no momento que instanciamos um objeto. Um método construtor obrigatoriamente possui o mesmo nome da classe, podendo haver vários métodos construtores, sendo que devemos utilizar o conceito de sobrecarga de métodos. Sobrecarga é quando temos dois ou mais métodos com o mesmo nome, mas com parâmetros diferentes em tipo ou em quantidade.

Técnicas orientadas a objetos Técnicas tradicionais
Métodos Procedimentos ou funções
Atributos Variável
Objeto Variável
Classes Tipos de dados

Comparação CFC com classes em Java

Classe pessoa em Java:

public class Pessoa {
// Atributos
private String nome;
private int idade;
// Estou usando sobrecarga no construtor.
// Construtor 1
public Pessoa() {
}
// Construtor 2
public Pessoa(String nome, int idade) {
this.nome = nome;
this.idade = idade;
}
// Métodos get e set
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getIdade() {
return idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
// Método toString
public String toString() {
return “\nNome: “+nome+”\nIdade: “+idade;
}
}

Programa em Java que acessa a classe pessoa:

public class Programa {
public static void main(String args[]){
Pessoa p = new Pessoa(“Renan Fretta”, 18);
System.out.println(p.toString());
}
}

Classe pessoa em CF:

<cfcomponent>
<!— Atributos —>
<cfset nome = “” >
<cfset idade = 0>
<!— Método construtor, diferente do Java que não é executado automaticamente —>
<cffunction name=”Init” access=”public”>
<cfargument name=”n” required=”true” type=”string”>
<cfargument name=”i” required=”true” type=”numeric”>
<cfset nome = n>
<cfset idade = i>
</cffunction>
<!— Métodos get e set —>
<cffunction name=”getNome” access=”public” returntype=”string”>
<cfreturn nome>
</cffunction>
<cffunction name=”setNome” access=”public” >
<cfargument name=”n” required=”true” type=”string”>
<cfset nome = n>
</cffunction>
<cffunction name=”getIdade” access=”public” returntype=”numeric”>
<cfreturn idade>
</cffunction>
<cffunction name=”setIdade” access=”public” >
<cfargument name=”i” required=”true” type=”numeric”>
<cfset idade = i>
</cffunction>
<!— Métodos toString —>
<cffunction name=”toString1″ access=”public” returntype=”string”>
<cfreturn “<br>Nome: “&nome&”<br>Idade: “&idade>
</cffunction>

</cfcomponent>

Programa em CF que acessa a classe pessoa:

<html>

<body>
<cfoutput>
<cfobject name=”p” component=”Pessoa”>
#p.Init(“Renan Fretta”, 18)#
#p.toString1()#
</cfoutput>
</body>

</html>

Considereções finais

Utilizei o método toString1 no CF, pois se eu colocar toString da erro, ele diz que o CF já tem uma função com esse nome. Olhei na referência sobre o comando this, mas não funcionou, então coloquei a inicial dos atributos como i para idade e n para nome.

Agora vou explicar um pouco a teoria e a prática:

  • Criei um objeto da classe Pessoa e instanciei de p :

<cfobject name=” p ” component=”Pessoa”>
Pessoa p = new Pessoa(?Renan Fretta?, 18);

  • Em Java como mostrei acima chamei o construtor com parâmetro automaticamente quando criei o objeto:

Pessoa p = new Pessoa(?Renan Fretta?, 18);

  • Se eu quisesse utilizar o construtor sem parâmetros basta eu colocar assim:

Pessoa p = new Pessoa();

  • No CF o construtor não é executado automaticamente, eu tenho que chamá-lo normalmente como chamaria outro método qualquer.

<cfoutput>#p.Init(“Renan Fretta”, 18)#</cfoutput>

  • Funciona da seguinte maneira quando crio um objeto da classe pessoa estou dizendo que a instância é uma pessoa. No nosso exemplo p é uma pessoa. Agora você coloca um nome para o p , depois você coloca uma idade para ele.

Então o nosso objeto p possui um nome e uma idade, agora é só perguntar para ele:
Qual é o seu nome?
R: Basicamente p.getNome();
Qual é a sua idade?
R: Basicamente p.getIdade();
Pera ai quero trocar meu nome:
R: Basicamente p.setNome(?Jõao?);
Quero trocar minha idade:
R: Basicamente p.setIdade(21);
Caso tenha alguma dúvida utilize o fórum.
Abraços, Renan Fretta – renan@mxstudio.com.br

Escrito por Renan Fretta on junho 19, 2005. Arquivado em Coldfusion. Você pode seguir as respostas a esse artigo pelo RSS 2.0. Você pode deixar respostas para esse artigo

1 resposta a ColdFusion Class – CFC

  1. muitoo interessante o site , gostei muitoo

    dos codigos !

    abraços !

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>