<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JulioGreff.net &#187; classes</title>
	<atom:link href="http://juliogreff.net/tag/classes/feed/" rel="self" type="application/rss+xml" />
	<link>http://juliogreff.net</link>
	<description>A mesma web, um novo estilo de desenvolvimento</description>
	<lastBuildDate>Sat, 07 May 2011 17:07:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Mootools &#8211; Chain</title>
		<link>http://juliogreff.net/mootools-chain/</link>
		<comments>http://juliogreff.net/mootools-chain/#comments</comments>
		<pubDate>Sun, 10 Feb 2008 16:16:13 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[bibliotecas]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[fila]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[poo]]></category>

		<guid isPermaLink="false">http://www.juliogreff.blog.br/mootools-chain/</guid>
		<description><![CDATA[Executar funções em determinada ordem, como filas de requisições, através de uma classe. Resumindo, é isso o que faz a classe Chain, da Mootools, e nesse post veremos como funciona e também como implementar essa funcionalidade em suas próprias classes. Seqüenciando Funções Para criar uma seqüência de funções, basta instanciar a classe Chain. Após isso, [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-eventos/' rel='bookmark' title='Permanent Link: Mootools &#8211; Eventos'>Mootools &#8211; Eventos</a></li>
<li><a href='http://juliogreff.net/mootools-classes/' rel='bookmark' title='Permanent Link: Mootools &#8211; Classes'>Mootools &#8211; Classes</a></li>
<li><a href='http://juliogreff.net/mootools-options/' rel='bookmark' title='Permanent Link: Mootools &#8211; Options'>Mootools &#8211; Options</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/funcoes-em-diferentes-escopos/' rel='bookmark' title='Permanent Link: Funções em Diferentes Escopos'>Funções em Diferentes Escopos</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p class="left"><img src="http://juliogreff.net/wp-uploads/chain.jpg" title="Cookies!" alt="Cookies!" /></p>
<p>Executar funções em determinada ordem, como filas de requisições, através de uma classe. Resumindo, é isso o que faz a classe <code>Chain</code>, da <a href="http://www.mootools.net/" rel="external" title="Mootools Library">Mootools</a>, e nesse post veremos como funciona e também como implementar essa funcionalidade em suas próprias classes.</p>
<h3>Seqüenciando Funções</h3>
<p>Para criar uma seqüência de funções, basta instanciar a classe <code>Chain</code>. Após isso, já podemos adicionar funções à seqüência para podermos chamá-la quando necessário.</p>
<p>Adicionamos funções à uma seqüência através do método <code>Chain.chain</code>, passando como parâmetro a função a ser adicionada à seqüência.</p>
<pre><code>var myChain = new Chain();
myChain.chain(function() {
	alert("Primeira Função");
});
myChain.chain(function() {
	alert("Segunda Função");
});</code></pre>
<p>O método <code>Chain.callChain</code> é quem chama a próxima função da seqüência. Quando o método é executado, a função é executada e então removida da seqüência.</p>
<pre><code>myChain.callChain(); // "Primeira Função"
myChain.callChain(); // "Segunda Função"</code></pre>
<p>Caso necessário, podemos limpar todas as funções de nossa seqüência através do método <code>Chain.clearChain</code>.</p>
<h3>Implementando em Classes</h3>
<p>Obviamente, <code>Chain</code> é muito mais útil quando usado dentro de uma função. Classes não deixam de ser uma função, e possuem muito mais poder. É nelas onde a utilização de <code>Chain</code> acontece na própria Mootools.</p>
<p>Após a implementação de <code>Chain</code> em alguma classe, podemos utilizar seus métodos.</p>
<pre><code>var myClass = new Class({
	"initialize": function() {},
	"execute": function() {
		this.callChain();
		if(this.chains.length &gt; 0) this.execute();
	}
});
myClass.implement(new Chain);
var myChain = new myClass();
myChain.chain(function() {
	alert("Primeira Função");
});
myChain.chain(function() {
	alert("Segunda Função");
});
myChain.execute();
</code></pre>
<p>Como no exemplo acima, também podemos utilizar a variável <code>Chain.chains</code>, que é o array que contém todas as funções na seqüência. Não é necessário se preocupar muito com ele, já que a classe faz todo o necessário. O utilizei acima somente para não criar um loop infinito.</p>
<p>Essa classe também já é implementada na utilização de efeitos, para encadear vários efeitos subseqüentes. Também muito útil para se criar uma fila de requisições Ajax, ou algo do gênero. Vou ficando por aqui, até!</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-eventos/' rel='bookmark' title='Permanent Link: Mootools &#8211; Eventos'>Mootools &#8211; Eventos</a></li>
<li><a href='http://juliogreff.net/mootools-classes/' rel='bookmark' title='Permanent Link: Mootools &#8211; Classes'>Mootools &#8211; Classes</a></li>
<li><a href='http://juliogreff.net/mootools-options/' rel='bookmark' title='Permanent Link: Mootools &#8211; Options'>Mootools &#8211; Options</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/funcoes-em-diferentes-escopos/' rel='bookmark' title='Permanent Link: Funções em Diferentes Escopos'>Funções em Diferentes Escopos</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/mootools-chain/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Mootools &#8211; Options</title>
		<link>http://juliogreff.net/mootools-options/</link>
		<comments>http://juliogreff.net/mootools-options/#comments</comments>
		<pubDate>Sun, 20 Jan 2008 16:47:44 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[bibliotecas]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[options]]></category>
		<category><![CDATA[poo]]></category>

		<guid isPermaLink="false">http://www.juliogreff.blog.br/mootools-options/</guid>
		<description><![CDATA[Através dos conceitos de reutilização de código, as funções JavaScript de hoje contém opções e mais opções para o usuário definir (ou não). Verificar cada uma dessas opções manualmente dá muito trabalho, mas a Mootools nos ajuda. Vamos ver o suporte dessa incrível biblioteca, através da classe Options. O que faz? A classe Options define [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-eventos/' rel='bookmark' title='Permanent Link: Mootools &#8211; Eventos'>Mootools &#8211; Eventos</a></li>
<li><a href='http://juliogreff.net/mootools-classes/' rel='bookmark' title='Permanent Link: Mootools &#8211; Classes'>Mootools &#8211; Classes</a></li>
<li><a href='http://juliogreff.net/mootools-chain/' rel='bookmark' title='Permanent Link: Mootools &#8211; Chain'>Mootools &#8211; Chain</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/mootools-menu-sanfona/' rel='bookmark' title='Permanent Link: Mootools &#8211; Menu Sanfona'>Mootools &#8211; Menu Sanfona</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Através dos conceitos de reutilização de código, as funções JavaScript de hoje contém opções e mais opções para o usuário definir (ou não). Verificar cada uma dessas opções manualmente dá muito trabalho, mas a <a href="http://www.mootools.net/" rel="external" title="Mootools Library">Mootools</a> nos ajuda. Vamos ver o suporte dessa incrível biblioteca, através da classe <code>Options</code>.</p>
<h3>O que faz?</h3>
<p>A classe <code>Options</code> define as opções passadas pelo usuário para alguma classe. Essa definição é feita sobrescrevendo os valores padrão (caso esses sejam definidos pelo usuário) e os mantendo quando nenhuma opção correspondente é passada.</p>
<p>Lógico, nada muito espetacular. Isso poderia ser feito através da função <code>$merge</code>, da própria Mootools. Mas há mais que isso. Além de definir opções, a classe <code>Options</code> também vasculha-as em busca de opções que comecem com &#8220;on&#8221;, e automaticamente adicionam-as como um evento, caso a classe <code>Events</code> esteja implementada. É mais que apenas um <code>$merge</code> disfarçado&#8230;</p>
<h3>Implementando</h3>
<p>Mais uma vez, antes de podermos utilizar essa classe extra, devemos implementá-la em nossa classe. Novamente, utilizamos o método <code>Class.implement</code>.</p>
<p>Caso você queira utilizar o suporte a eventos, também implemente a classe <code><a href="http://juliogreff.net/mootools-eventos" title="Mootools - Eventos">Events</a></code>, na mesma declaração.</p>
<pre><code>myClass.implement(new Options, new Events);
</code></pre>
<h3>Definindo Opções</h3>
<p>Antes de tudo, é necessário definir as opções que serão utilizadas por padrão. Essas opções padrão devem estar em <code>this.options</code>, sendo <code>this</code> a nossa classe.</p>
<pre><code>var SlideShow = new Class({
	"options": {
		"slides": [],
		"startSlide": 0
	},
	"initialize": function() {}
});
</code></pre>
<p>Para fazer a &#8220;escolha&#8221; das opções, basta utilizar o método <code>Options.setOptions</code>, levando como parâmetro as opções que devem sobrescrever as opções padrão. Após a chamada ao método, todas as opções estarão disponíveis em <code>this.options</code>. Se o usuário definir opções que não estão definidas como padrão, elas também serão adicionadas.</p>
<pre><code>var SlideShow = new Class({
	"options": {
		"slides": [],
		"startSlide": 0
	},
	"initialize": function(options) {
		this.setOptions(options);
	}
});
var mySlideShow = new SlideShow({
	"slides": [$("slide-1"), $("slide-2")],
	"wrap": true
});
mySlideShow.options["startSlide"]; // 0
mySlideShow.options["wrap"]; // true, também foi adicionada
</code></pre>
<h3>Definindo Eventos</h3>
<p>Não há diferença quanto a adicionar opções comuns ou eventos, os dois são adicionados da mesma maneira.</p>
<pre><code>var mySlideShow = new SlideShow({
	"slides": [$("slide-1"), $("slide-2")],
	"wrap": true,
	"onStart": function() {}
});
</code></pre>
<p>No caso de eventos, não é necessário definir uma opção padrão, já que os eventos são chamados apenas se estiverem definidos, não causando erros. Caso você considere necessário, pode-se usar <code>Class.empty</code> como padrão. <code>Class.empty</code> é apenas uma função vazia, apenas para não precisarmos nos preocupar em definir algo a ser executado.</p>
<pre><code>var SlideShow = new Class({
	"options": {
		"slides": [],
		"startSlide": 0,
		"onStart": Class.empty
	},
	"initialize": function(options) {
		this.setOptions(options);
		this.fireEvent("onStart", this.options.startSlide, 10);
	}
});
</code></pre>
<p>Assim como as outras classes, a própria biblioteca faz grande uso de <code>Options</code>. É o espírito da reutilização, tanto na própria biblioteca quanto para os desenvolvedores. Até a próxima!</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-eventos/' rel='bookmark' title='Permanent Link: Mootools &#8211; Eventos'>Mootools &#8211; Eventos</a></li>
<li><a href='http://juliogreff.net/mootools-classes/' rel='bookmark' title='Permanent Link: Mootools &#8211; Classes'>Mootools &#8211; Classes</a></li>
<li><a href='http://juliogreff.net/mootools-chain/' rel='bookmark' title='Permanent Link: Mootools &#8211; Chain'>Mootools &#8211; Chain</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/mootools-menu-sanfona/' rel='bookmark' title='Permanent Link: Mootools &#8211; Menu Sanfona'>Mootools &#8211; Menu Sanfona</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/mootools-options/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Mootools &#8211; Eventos</title>
		<link>http://juliogreff.net/mootools-eventos/</link>
		<comments>http://juliogreff.net/mootools-eventos/#comments</comments>
		<pubDate>Sat, 12 Jan 2008 16:42:55 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[bibliotecas]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[poo]]></category>

		<guid isPermaLink="false">http://www.juliogreff.blog.br/mootools-eventos/</guid>
		<description><![CDATA[Uma função que executa quando algo começa, outra chamada quando alguma coisa termina, quando se começa o processamento ou quando&#8230; bem, você pode escolher. A Mootools permite isso, através da classe Events. Você pode implementar eventos para serem chamados quando você quiser dentro de suas funções, e é isso que mostrarei nesse post. A classe [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-options/' rel='bookmark' title='Permanent Link: Mootools &#8211; Options'>Mootools &#8211; Options</a></li>
<li><a href='http://juliogreff.net/mootools-chain/' rel='bookmark' title='Permanent Link: Mootools &#8211; Chain'>Mootools &#8211; Chain</a></li>
<li><a href='http://juliogreff.net/mootools-classes/' rel='bookmark' title='Permanent Link: Mootools &#8211; Classes'>Mootools &#8211; Classes</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/scroller-made-in-mootools/' rel='bookmark' title='Permanent Link: Scroller Made in Mootools'>Scroller Made in Mootools</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Uma função que executa quando algo começa, outra chamada quando alguma coisa termina, quando se começa o processamento ou quando&#8230; bem, você pode escolher. A <a href="http://www.mootools.net/" rel="external" title="Mootools Library">Mootools</a> permite isso, através da classe <code>Events</code>. Você pode implementar eventos para serem chamados quando você quiser dentro de suas funções, e é isso que mostrarei nesse post.</p>
<p>A classe <code>Events</code> permite que você defina eventos para suas próprias classes. Esses eventos podem ser chamados a qualquer momento, e também podem ser criados quantos eventos forem necessários.</p>
<p>Um evento pode receber qualquer nome, mas considera-se uma boa prática criar eventos que comecem com &#8220;on&#8221;, como &#8220;onClick&#8221;, &#8220;onStart&#8221;, &#8220;onEnd&#8221;&#8230; O &#8220;on&#8221; é requerido apenas se você desejar utilizar eventos juntamente com a classe <code>Options</code> (pretendo escrever sobre ela também).</p>
<h3><a title="implementando" name="implementando"></a>Implementando</h3>
<p>Para podermos utilizar a classe <code>Events</code>, primeiro é necessário implementá-la na classe em que se deseja utilizá-la. Isso é feito através do método <code><a href="http://juliogreff.net/mootools-classes/#implementando" title="Classes Mootools - Implementando Novos Métodos">Class.implement</a></code>. Veja:</p>
<pre><code>var SlideShow = new Class({
	"initialize": function() {}
});
SlideShow.implement(new Events);
</code></pre>
<h3><a title="chamando" name="chamando"></a>Chamando Eventos</h3>
<p>Após a implementação, ainda temos que fazer as chamadas aos eventos. Para isso, utilizamos o método <code>Events.fireEvent</code>, que agora pode ser chamado do escopo da classe, ou seja, <code>this.fireEvent</code>. Esse método recebe os seguintes parâmetros:</p>
<ul>
<li><code>type</code>: O tipo do evento (&#8220;onClick&#8221;, &#8220;onDrag&#8221; ou qualquer outro)</li>
<li><code>args</code>: Argumentos a serem passados à função. Pode ser apenas um argumento ou um array contendo vários.</li>
<li><code>delay</code>: Tempo, em milissegundos, que o evento deve esperar para ser disparado.</li>
</ul>
<pre><code>var SlideShow = new Class({
	"initialize": function() {
		this.fireEvent("onStart", null, 10);
	},
	"nextSlide": function() {
		this.currentSlide += 1;
		this.fireEvent("onChangeSlide", this.currentSlide, 10);
	}
});
</code></pre>
<h3><a title="definindo" name="definindo"></a>Definindo Eventos</h3>
<p>Para definir funções a serem executadas em determinado evento, utilizamos o método <code>Events.addEvent</code>. O método recebe como parâmetros o tipo do evento e a função que deve ser executada.</p>
<pre><code>var mySlideShow = new SlideShow();
mySlideShow.addEvent("onStart", showSplashScreen);
</code></pre>
<p>Note que os eventos podem ser adicionados tanto na definição da classe quanto em uma de suas instâncias, como fizemos acima.</p>
<p>Eventos podem ter muita utilidade, e a própria biblioteca também faz bastante uso deles, como acontece nas classes <code>Ajax</code> e <code>Fx</code>. Basta ter criatividade. Até a próxima!</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-options/' rel='bookmark' title='Permanent Link: Mootools &#8211; Options'>Mootools &#8211; Options</a></li>
<li><a href='http://juliogreff.net/mootools-chain/' rel='bookmark' title='Permanent Link: Mootools &#8211; Chain'>Mootools &#8211; Chain</a></li>
<li><a href='http://juliogreff.net/mootools-classes/' rel='bookmark' title='Permanent Link: Mootools &#8211; Classes'>Mootools &#8211; Classes</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/scroller-made-in-mootools/' rel='bookmark' title='Permanent Link: Scroller Made in Mootools'>Scroller Made in Mootools</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/mootools-eventos/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Mootools &#8211; Classes</title>
		<link>http://juliogreff.net/mootools-classes/</link>
		<comments>http://juliogreff.net/mootools-classes/#comments</comments>
		<pubDate>Tue, 01 Jan 2008 16:08:40 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[bibliotecas]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[poo]]></category>

		<guid isPermaLink="false">http://www.juliogreff.blog.br/mootools-classes/</guid>
		<description><![CDATA[A programação orientada a objetos facilita, e muito, a vida do desenvolvedor. Podemos utilizar o mesmo código em vários lugares, para diferentes situações, modificando e estendendo apenas o que for necessário, sem precisar reescrever código. A Mootools, além de todas as outras funcionalidades, contém um sistema de criação de classes muito bem-pensado. Vamos ver como [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-eventos/' rel='bookmark' title='Permanent Link: Mootools &#8211; Eventos'>Mootools &#8211; Eventos</a></li>
<li><a href='http://juliogreff.net/mootools-chain/' rel='bookmark' title='Permanent Link: Mootools &#8211; Chain'>Mootools &#8211; Chain</a></li>
<li><a href='http://juliogreff.net/mootools-options/' rel='bookmark' title='Permanent Link: Mootools &#8211; Options'>Mootools &#8211; Options</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-3/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 3'>JavaScript Orientado a Objetos &#8211; Parte 3</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>A programação orientada a objetos facilita, e muito, a vida do desenvolvedor. Podemos utilizar o mesmo código em vários lugares, para diferentes situações, modificando e estendendo apenas o que for necessário, sem precisar reescrever código. A <a href="http://www.mootools.net/" rel="external" title="Mootools Library">Mootools</a>, além de todas as outras funcionalidades, contém um sistema de criação de classes muito bem-pensado. Vamos ver como escrever classes utilizando esse sistema, assim como extendê-las e herdá-las.</p>
<h3><a title="porque" name="porque"></a>Por que Classes?</h3>
<p>Classes têm algumas vantagens sobre funções independentes. Podemos modificar e reusar suas funcionalidades sem precisar modificar o código original, criar objetos que armazenam informações dentro de seu próprio escopo e também utilizar métodos relacionados ao objeto. Além disso, com classes é possível utilizar menos código em mais situações.</p>
<p>Um bom exemplo da implementação de classes é a própria Mootools. Boa parte do que há na biblioteca é baseado em classes, estendendo-as, modificando-as e herdando-as. Funções não são muito utilizadas pela Mootools, pois o poder da utilização das classes é muito maior.</p>
<h3><a title="definindo" name="definindo"></a>Definindo Classes</h3>
<p>Para definir classes com a Mootools, utilizamos o construtor <code>Class</code>. O construtor leva como parâmetros os métodos e atributos da classe, através de uma <a href="http://juliogreff.net/javascript-object-notation/" title="JavaScript Object Notation">literal de objeto</a>.</p>
<pre><code>var Vehicle = new Class({
	"initialize": function(features) {
		// Salvando as características no escopo do objeto
		this.features = features;
		this.position = 0;
	},
	"goForward": function(distance) {
		this.position += distance;
	},
	"goBackward": function(distance) {
		this.position -= distance;
	}
});
</code></pre>
<p>Na classe acima, definimos três métodos: <code>initialize</code>, <code>goForward</code> e <code>goBackward</code>. O método <code>initialize</code> deve estar presente em cada definição de classe, por ser o método que é chamado quando a classe é instanciada.</p>
<p>Após termos criado nossa classe, podemos instanciá-la sempre que necessário.</p>
<pre><code>var myVehicle = new Vehicle({"color": "red"});
// Utilizando os métodos do objeto
myVehicle.goForward(100);
// Acessando propriedades
myVehicle.position; // 100
</code></pre>
<h3><a title="estendendo" name="estendendo"></a>Estendendo Classes</h3>
<p>Como em outras linguagens orientadas a objeto, as classes podem ser estendidas para criar funcionalidades mais específicas. No caso da classe <code>Vehicle</code>, podemos estendê-la para criar tipos de veículos específicos, como carros e motos. Para isso, usamos o método <code>Class.extend</code>, levando como parâmetro os novos métodos e propriedades que a classe deve conter.</p>
<pre><code>var Car = Vehicle.extend({
	// O novo método de inicialização
	"initialize": function(features) {
		// Inicializamos a classe pai dentro da classe atual
		this.parent(features);
		this.wheels = 4;
		this.gear = 0;
	},
	"gearUp": function() {
		if(this.gear &lt; this.features.gears) this.gear++;
	},
	"gearDown": function() {
		if(this.gear &gt; -1) this.gear--;
	}
});
var Motorcycle = Vehicle.extend({
	"initialize": function(features) {
		this.parent(features);
		this.wheels = 2;
		this.gear = 0;
	},
	"gearUp": function() {
		if(this.gear &lt; this.features.gears) this.gear++;
	},
	"gearDown": function() {
		if(this.gear &gt; 0) this.gear--;
	}
});
</code></pre>
<p>Através do código acima, criamos duas novas classes baseadas em <code>Vehicle</code>, <code>Car</code> e <code>Motorcycle</code>, cada uma com suas características específicas, mas herdando os métodos da classe pai.</p>
<p>Assim como podemos criar tipos específicos de veículos, também podemos criar tipos específicos de carros e motos, bastando estender essas duas classes. Não há limite para extensões.</p>
<p>Além de estender outras classes, também é possível estender a própria classe, implementando novos métodos. Note que não é necessário recriar o método <code>Class.initialize</code>, já que não o modificamos, apesar de ser possível se necessário.</p>
<pre><code>var Car = Car.extend({
	"horn": function() {
		this.soundHorn = true;
	}
});
</code></pre>
<h3><a title="implementando" name="implementando"></a>Implementando Novos Métodos</h3>
<p>Ao estender classes, o método <code>Class.extend</code> cria uma nova cópia da classe, não alterando-a de maneira alguma. Isso é facilmente percebido, já que, em nosso exemplo, <code>myVehicle.gearUp</code> não funciona, pois a classe não foi modificada quando criamos as outras extensões.</p>
<p>Para modificar a classe sem criar uma cópia sua e sem precisar modificar código algum, a Mootools usa o método <code>Class.implement</code>, recebendo como parâmetros os métodos e propriedades a serem implementados.</p>
<p>Modificando o último exemplo, poderíamos trocar <code>Car.extend</code> para <code>Car.implement</code>, eliminando a cópia desnecessária que criamos.</p>
<pre><code>Car.implement({
	"horn": function() {
		this.soundHorn = true;
	}
});
</code></pre>
<p>Vale lembrar que utilizando <code>Class.implement</code> não temos acesso ao método <code>this.parent</code>, já que não estamos criando uma outra classe, somente implementando propriedades. Nesse caso, não há classe pai.</p>
<p>O uso de classes permite muito mais do que reutilização de código. Poupa-se tempo tanto no desenvolvimento quanto no uso do código e esse uso torna-se muito mais intuitivo, já que aproxima a programação de objetos reais. Por essas e outras que sou adepto dessa maravilhosa biblioteca. Até a próxima!</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-eventos/' rel='bookmark' title='Permanent Link: Mootools &#8211; Eventos'>Mootools &#8211; Eventos</a></li>
<li><a href='http://juliogreff.net/mootools-chain/' rel='bookmark' title='Permanent Link: Mootools &#8211; Chain'>Mootools &#8211; Chain</a></li>
<li><a href='http://juliogreff.net/mootools-options/' rel='bookmark' title='Permanent Link: Mootools &#8211; Options'>Mootools &#8211; Options</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-3/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 3'>JavaScript Orientado a Objetos &#8211; Parte 3</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/mootools-classes/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

