<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<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/"
	>

<channel>
	<title>modificadores &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/modificadores/</link>
	<description>Feed of posts on WordPress.com tagged "modificadores"</description>
	<pubDate>Fri, 04 Dec 2009 12:38:17 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[modificadores 1]]></title>
<link>http://alphastudio3d.wordpress.com/2009/11/24/modificadores-1/</link>
<pubDate>Tue, 24 Nov 2009 00:52:19 +0000</pubDate>
<dc:creator>chronosx</dc:creator>
<guid>http://alphastudio3d.wordpress.com/2009/11/24/modificadores-1/</guid>
<description><![CDATA[EXTRUDE: le agrega volumen en una dirección, responde a parametros se puede aplicar en splines, de e]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>EXTRUDE:</p>
<p>le agrega volumen en una dirección, responde a parametros</p>
<p>se puede aplicar en splines, de esta manera el splines obtiene volumen y es renderizable</p>
<p>*también es aplicable en textos.</p>
<p>BEVEL:</p>
<p>este modificador, trabaja muy parecido a EXTRUDE, pero con la diferencia que nos permite agregar un bisel</p>
<p>en sus parametros, podemos aplicar 3 niveles de bevel rápidamente.</p>
<p>dentro de las opciones de bevel, cada level esta compuesto por dos parámetros:</p>
<p>HEIGH- indica la profundidad del nivel</p>
<p>OUTLINE &#8211; indica cuanto de biselado tendrá este nivel</p>
<p>*nota: la función de KEEP LINES FROM CROSSING evita los cruces de geometría, corrigiendolos defectos que generan ciertas líneas.</p>
<p><a href="http://alphastudio3d.wordpress.com/files/2009/11/9.jpg"><img class="aligncenter size-full wp-image-42" title="9" src="http://alphastudio3d.wordpress.com/files/2009/11/9.jpg" alt="" width="655" height="407" /></a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Splines - Modificadores: torno (lathe) , extruir (extrude) , biselar (bevel)]]></title>
<link>http://metodosgraficos.wordpress.com/2009/10/30/splines-modificadores-torno-lathe-extruir-extrude-biselar-bevel/</link>
<pubDate>Fri, 30 Oct 2009 14:54:32 +0000</pubDate>
<dc:creator>MethodGraphic</dc:creator>
<guid>http://metodosgraficos.wordpress.com/2009/10/30/splines-modificadores-torno-lathe-extruir-extrude-biselar-bevel/</guid>
<description><![CDATA[Hola amigos del 3D. Bienvenidos a este tutorial básico donde intentaremos explicar qué son las splin]]></description>
<content:encoded><![CDATA[Hola amigos del 3D. Bienvenidos a este tutorial básico donde intentaremos explicar qué son las splin]]></content:encoded>
</item>
<item>
<title><![CDATA[Tutorial Básico: Primitivas y modificadores básicos]]></title>
<link>http://metodosgraficos.wordpress.com/2009/10/29/tutorial-basico-primitivas-y-modificadores-basicos/</link>
<pubDate>Fri, 30 Oct 2009 04:24:24 +0000</pubDate>
<dc:creator>MethodGraphic</dc:creator>
<guid>http://metodosgraficos.wordpress.com/2009/10/29/tutorial-basico-primitivas-y-modificadores-basicos/</guid>
<description><![CDATA[Primitivas Hola!! Bienvenidos al excitante mundo del 3D!! El propósito del siguiente tutorial es exp]]></description>
<content:encoded><![CDATA[Primitivas Hola!! Bienvenidos al excitante mundo del 3D!! El propósito del siguiente tutorial es exp]]></content:encoded>
</item>
<item>
<title><![CDATA[3D Studio Max 2009 - Modificando e modelando um objeto]]></title>
<link>http://codewars.wordpress.com/2009/09/09/3d-studio-max-2009-modificando-um-objeto/</link>
<pubDate>Wed, 09 Sep 2009 23:34:19 +0000</pubDate>
<dc:creator>negativepositivenegative</dc:creator>
<guid>http://codewars.wordpress.com/2009/09/09/3d-studio-max-2009-modificando-um-objeto/</guid>
<description><![CDATA[Neste tutorial mostrarei como aplicar modificadores a objetos paramétricos e modelar objetos editáve]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Neste tutorial mostrarei como aplicar modificadores a objetos paramétricos e modelar objetos editáveis, as maiores ferramentas para criação de modelos complexos, e para seguir este tutorial com sucesso precisará de um conhecimento básico do 3D Studio, pode encontrar <a href="http://codewars.wordpress.com/2009/08/29/3d-studio-max-2009-interface-e-primitivas/">aqui</a>. No 3D Studio Max 2009 existem dois tipos de objeto. Existe o objeto paramétrico e o editável. O paramétrico é um objeto para o qual podem ser passados parâmetros para especificar altura, tamanho, etc&#8230; Os modificadores só podem ser aplicados a objetos paramétricos. Um objeto editável, por outro lado, não pode receber esses parâmetros e nem modificadores podem ser aplicados a esse tipo. Então o que podemos fazer com objetos editáveis? Os objetos editáveis podem ser modelados, uma solução muito flexível. Abaixo podemos ver um cilindro editável com alguns segmentos a mais sendo editado.</p>
<p><img class="aligncenter size-full wp-image-190" title="editavel" src="http://codewars.wordpress.com/files/2009/09/editavel.png" alt="editavel" width="515" height="268" /></p>
<p><strong>MODIFICANDO OBJETOS PARAMÉTRICOS</strong></p>
<p>As primitivas do 3D Studio são por default paramétricas. Podemos aplicar modificadores nessas primitivas no painel Modify. Não vou explicar os modificadores aqui, porque são muitos, e isso resultaria em um tutorial muito grande, e depois você pode conhecer os outros modificadores você mesmo. Para este tutorial vamos criar uma cadeia de DNA.</p>
<ol>
<li>Crie a primitiva Plane no painel Create.</li>
<li>Vá ao painel Modify e preencha o parâmetro Length Segs para 11, Width Segs para 1, Length para 300 e Width para 60.</li>
<li>No topo do painel Modify há um Rollout chamado Modifier List. Nessa lista estão os modificadores que vamos aplicar. Clique nesse rollout e no Modificador Lattice.</li>
<li>Marque a Radio Box Icosa nos parâmetros do modificador Lattice na categoria Joints e digite 6 nos segmentos.</li>
<li>Clique novamente na Modifier List e selecione Twist.</li>
<li>No parâmetro Angle do Twist digite 360 e marque a Radio Box Y na categoria Twist Axis.</li>
<li>Agora nós temos algo muito semelhante com uma cadeia de DNA, mas você deve ter notado que as juntas ficaram meio achatadas. Para corrigir isso arraste o modificador Twist para baixo de Lattice.</li>
<li>Renderize a cena clicando no botão Render e temos uma cadeia de DNA pronta!</li>
</ol>
<p><img class="aligncenter size-full wp-image-192" title="DNA" src="http://codewars.wordpress.com/files/2009/09/dna.png" alt="DNA" width="334" height="252" /></p>
<p><strong>COMO ISSO FOI FEITO?</strong></p>
<p>Você pode estar se perguntando pra que foram necessários todos aqueles passos. Os ajustes dos segmentos do Plane foram necessários para criar as juntas certas quando o modificador lattice fosse aplicado. O Lattice transformou os segmentos em cilindros e suas extremidades em juntas para dar ao Cilindro uma aparência de DNA, e os ajustes em seus parâmetros foram usados para transformar as juntas em esferas, como nas gravuras de DNA. Enfim, o Twist foi usado para girar o DNA em 360 graus.</p>
<p><strong>MODELANDO OBJETOS EDITÁVEIS</strong></p>
<p>Existem vários tipos de objetos editáveis. Neste tutorial usarei Editable Poly. Antes de começar devo explicaro uso do Soft Selection. Vamos criar algumas montanhas em um Plane agora.</p>
<ol>
<li>Crie um objeto Plane(não muito pequeno) e no parâmetro Width Segs digite 12 e em Length Segs também.</li>
<li>Clique com o botão direito nesse objeto e depois em Convert To -&#62; Editable Poly.</li>
<li>Vá ao Painel Modify e clique no botão de mais a esquerda de Editable Poly.</li>
<li>Selecione o subojeto Vertex.</li>
<li>Selecione qualquer um dos pontos que aparecem sobre o plano e você poderá escalá-lo, girá-lo, mudar sua posição e até deletá-lo! Tudo isso usando as ferramentas básicas de Scale, Rotate e Move, mas antes de começar a modificá-lo devo informar da ferramenta Soft Selection. Essa ferramenta permite uma transformação menos abrupta das vértices de um objeto editável. Para usá-la marque a checkbox Use Soft Selection. Abaixo dessa checkbox haverão valores de Fallof e Pinch para declarar quanto outras vértices serão afetadas. Divirta-se!</li>
</ol>
<p>A cena renderizada deve ter ficado pelo menos um pouco parecida com isso:</p>
<p><img class="aligncenter size-full wp-image-196" title="mountains" src="http://codewars.wordpress.com/files/2009/09/mountains.png" alt="mountains" width="449" height="353" /></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[SCJP Declaração e Controle de Acesso - Parte 4 - Continuação]]></title>
<link>http://hasmira.wordpress.com/2009/05/21/scjp-declaracao-e-controle-de-acesso-parte-4-continuacao/</link>
<pubDate>Thu, 21 May 2009 20:21:09 +0000</pubDate>
<dc:creator>hasmira</dc:creator>
<guid>http://hasmira.wordpress.com/2009/05/21/scjp-declaracao-e-controle-de-acesso-parte-4-continuacao/</guid>
<description><![CDATA[Modificadores  Final Abstract Synchronized Native Strictfp Lista de Argumentos de Comprimento Variáv]]></description>
<content:encoded><![CDATA[Modificadores  Final Abstract Synchronized Native Strictfp Lista de Argumentos de Comprimento Variáv]]></content:encoded>
</item>
<item>
<title><![CDATA[SCJP Declarações e Controle de Acesso - 4 parte]]></title>
<link>http://hasmira.wordpress.com/2009/05/19/scjp-declaracoes-e-controle-de-acesso-4-parte/</link>
<pubDate>Tue, 19 May 2009 19:50:04 +0000</pubDate>
<dc:creator>hasmira</dc:creator>
<guid>http://hasmira.wordpress.com/2009/05/19/scjp-declaracoes-e-controle-de-acesso-4-parte/</guid>
<description><![CDATA[Quarta parte Objetivos 1.3 e 1.4 Em inglês: Develop code that declares, initializes, and uses primit]]></description>
<content:encoded><![CDATA[Quarta parte Objetivos 1.3 e 1.4 Em inglês: Develop code that declares, initializes, and uses primit]]></content:encoded>
</item>
<item>
<title><![CDATA[SCJP Declarações e Controle de Acesso - 2 parte]]></title>
<link>http://hasmira.wordpress.com/2009/05/15/scjp-primeiro-capitulo-declaracoes-e-controle-de-acesso-2/</link>
<pubDate>Fri, 15 May 2009 16:13:09 +0000</pubDate>
<dc:creator>hasmira</dc:creator>
<guid>http://hasmira.wordpress.com/2009/05/15/scjp-primeiro-capitulo-declaracoes-e-controle-de-acesso-2/</guid>
<description><![CDATA[Segunda Parte Objetivo 1.1 Em inglês: Develop code  that declare classes (incluiding abastract and a]]></description>
<content:encoded><![CDATA[Segunda Parte Objetivo 1.1 Em inglês: Develop code  that declare classes (incluiding abastract and a]]></content:encoded>
</item>
<item>
<title><![CDATA[Setando valores em objetos Java versus PHP]]></title>
<link>http://diogobesson.wordpress.com/2009/05/05/setando-valores-em-objetos-java-versus-php/</link>
<pubDate>Tue, 05 May 2009 14:37:21 +0000</pubDate>
<dc:creator>diogobesson</dc:creator>
<guid>http://diogobesson.wordpress.com/2009/05/05/setando-valores-em-objetos-java-versus-php/</guid>
<description><![CDATA[Estou quase abrindo uma série JAVA X PHP neste weblog! Depois da aula de ontem fiquei ainda mais cur]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Estou quase abrindo uma série JAVA X PHP neste weblog!</p>
<p>Depois da aula de ontem fiquei ainda mais curioso sobre o tratamento de memória dessas duas linguagens. Se já não bastasse a diferença que existe com relação ao tratamento de tipo e o retorno que os scripts dão para os ternários, ontem vimos como elas atribuem valores para os atributos das classes.</p>
<p><strong>EM JAVA</strong></p>
<p>Criamos 3 arquivos</p>
<ul>
<li>Pessoa.java :: classe que possui os atributos de uma Pessoa;</li>
<li>Parametros.java :: classe que tem dois metodos. Um que muda o valor de uma variavel x e outra que muda o atributo nome da classe Pessoa;</li>
<li>Teste.java :: classe que tenta modificar o valor de x, de y e do nome da Pessoa.</li>
</ul>
<p><strong>Pessoa .java</strong></p>
<p><span style="color:#0000ff;">class Pessoa {<br />
int id;<br />
String nome;<br />
}</span></p>
<p><strong>Parametros.java</strong></p>
<p><span style="color:#0000ff;">class Parametros {<br />
int mudarInt (int x) {<br />
x = 7;<br />
return 10;<br />
};</span></p>
<p><span style="color:#0000ff;">void mudarNome (Pessoa p) {<br />
p.nome = &#8220;Joao&#8221;;<br />
}<br />
}</span></p>
<p><strong>Teste.java</strong></p>
<p><span style="color:#0000ff;">class Teste {<br />
public static void main (String [] args) {<br />
int x = 4;</span></p>
<p><span style="color:#0000ff;">Parametros p = new Parametros();</span></p>
<p><span style="color:#0000ff;">int y = p.mudarInt(x);</span></p>
<p><span style="color:#0000ff;">Pessoa pes = new Pessoa();<br />
pes.nome = &#8220;Jose&#8221;;</span></p>
<p><span style="color:#0000ff;">p.mudarNome(pes);</span></p>
<p><span style="color:#0000ff;">System.out.println(&#8220;X = &#8220;+x);<br />
System.out.println(&#8220;Y = &#8220;+y);<br />
System.out.println(&#8220;P.NOME = &#8220;+pes.nome);</span></p>
<p><span style="color:#0000ff;">}<br />
}</span></p>
<p><strong><span style="color:#000000;">Ao compilar Teste.java temos como retorno:</span></strong></p>
<p>E:\xampp\htdocs\testes\parametrizacao&#62; java Teste<br />
<span style="color:#ff0000;">X = 4<br />
Y = 10<br />
P.NOME = Joao</span><br />
Process java exited with code 0</p>
<p>Isso acontece porque X é uma variavel local em ambos os casos. Dentro de Teste ele está no escopo da classe e dentro de Parametros, está no escopo do método mudarInt. Este método retorna o valor 10, que é atribuído a variável Y, logo X permanecerá com valor 4 dentro do escopo de Teste e Y recebeu 10 do método mudar Int.</p>
<p>A grande sacada está no valor do atributo &#8220;nome&#8221; da classe Pessoa&#8230;</p>
<p>Quando estamos trabalhando com atribuição das classes em Java, o que acontece é uma cópia do valor da variável que referencia um objeto. Isso nos leva a entender que o trabalho de troca de valores dos atributos dentro de uma classe para esse objeto copiado está sempre se referindo ao mesmo objeto.</p>
<p>Tivemos como exemplo os correios.</p>
<p>Você pode mandar duas cartas para o mesmo endereço. O endereço em questão é a referência para o seu objeto. Duas cartas (comandos) referenciando (destinatário para o endereço de referência) o mesmo objeto.</p>
<p>Como a última ação foi mudar o valor de nome do objeto único que foi criado e referenciado para &#8216;João&#8217;, este irá fixar e devolver o valor citado.</p>
<p>Diferentemente do que acontece com o PHP.</p>
<p>O PHP não cria cópias de referências, portanto a cada atribuição de referências dentro de um método, uma nova instância será criada. Dá pra imaginar que o valor do atributo nome da classe Pessoa na primeira referência será &#8216;José&#8217; e na segunda referência será &#8216;João&#8217;. Ao chamar o valor do atributo ele devolverá &#8216;José&#8217;, pois o objeto chamado está na primeira referência, enquanto que a segunda existe apenas dentro do escopo do método e será eliminado da memória pelo interpretador.</p>
<p>Vamos fazer o teste?</p>
<p><strong>EM PHP</strong></p>
<p>criamos igualmente 3 arquivos:</p>
<ul>
<li>Pessoa.class.php :: classe que possui os atributos de uma Pessoa;</li>
<li>Parametros.class.php :: classe que tem dois metodos. Um que muda o valor de uma variavel x e outra que muda o atributo nome da classe Pessoa;</li>
<li>Teste.class.php :: classe que tenta modificar o valor de x, de y e do nome da Pessoa.</li>
</ul>
<p><strong>Pessoa.class.php</strong></p>
<p><span style="color:#0000ff;">class Pessoa{<br />
var $id;<br />
var $nome;</span></p>
<p><span style="color:#0000ff;">/** setters and getters para atributo ID */<br />
public function setID($id) {<br />
$this-&#62;id = $id;<br />
}<br />
public function getID() {<br />
return $this-&#62;id;<br />
}</span></p>
<p><span style="color:#0000ff;">/** setters and getters para atributo NOME */<br />
public function setNome($nome) {<br />
$this-&#62;nome = $nome;<br />
}<br />
public function getNome() {<br />
return $this-&#62;nome;<br />
}<br />
}</span></p>
<p><strong>Parametros.class.php</strong></p>
<p><span style="color:#0000ff;">class Parametros {<br />
public function mudarInt($x) {<br />
$x = 7;<br />
return 10;<br />
}</span></p>
<p><span style="color:#0000ff;">public function mudarNome($objeto, $nome) {<br />
$objetoPessoa = $objeto;<br />
$objetoPessoa-&#62;setNome = $nome;<br />
}<br />
}</span></p>
<p><strong>Teste.class.php</strong></p>
<p><span style="color:#0000ff;">/** inclui as classes auxiliares para a classe Teste */<br />
require_once(&#8220;Pessoa.class.php&#8221;);<br />
require_once(&#8220;Parametros.class.php&#8221;);</span></p>
<p><span style="color:#0000ff;">class Teste {<br />
public function __construct(){<br />
$x = 4;</span></p>
<p><span style="color:#0000ff;">$p = new Parametros();<br />
$pes = new Pessoa();</span></p>
<p><span style="color:#0000ff;">$y = $p-&#62;mudarInt($x);</span></p>
<p><span style="color:#0000ff;">$pes-&#62;setNome(&#8220;Jose&#8221;);</span></p>
<p><span style="color:#0000ff;">$p-&#62;mudarNome($pes, &#8220;Joao&#8221;);</span></p>
<p><span style="color:#0000ff;">$saida = &#8220;X = &#8220;.$x.&#8221;&#60;br /&#62;Y = &#8220;.$y.&#8221;&#60;br /&#62;PES::NOME = &#8220;.$pes-&#62;getNome().&#8221;&#60;hr&#62;&#8221;;</span></p>
<p><span style="color:#0000ff;">echo $saida;<br />
}<br />
}</span></p>
<p><span style="color:#0000ff;">$teste = new Teste();</span></p>
<p><strong>Ao interpretar a classe Teste.class.php temos como retorno:</strong></p>
<p><span style="color:#ff0000;">X = 4<br />
Y = 10<br />
PES::NOME = Jose</span></p>
<p>Muito interessante, porém creio que o tratamento de objetos em Java tem menos gambiarras e a lógica de copiar referências deveria ser adotada como padrão para qualquer linguagem de programação. Vamos esperar as próximas versões do PHP pra ver o que acontece.</p>
<p>um abraço ao visitante</p>
<p>Diogo Besson</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Modificadores de acceso]]></title>
<link>http://elmundodelasideas.wordpress.com/2008/10/25/modficadores-de-acceso/</link>
<pubDate>Sat, 25 Oct 2008 14:26:56 +0000</pubDate>
<dc:creator>gpelegay</dc:creator>
<guid>http://elmundodelasideas.wordpress.com/2008/10/25/modficadores-de-acceso/</guid>
<description><![CDATA[Hola a todos, Hoy querría hablar de los modificadores de acceso que disponemos en .net cuando nos di]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><div class="mceTemp">Hola a todos,</div>
<p>Hoy querría hablar de los modificadores de acceso que disponemos en .net cuando nos disponemos a definir nuestras clases. Como siempre pondremos un ejemplo para abordar el tema.</p>
<p>Primero enumeramos los distintos modificadores:</p>
<div class="labelheading"><strong></strong></div>
<div class="tableSection">
<table border="0" width="100%">
<tbody>
<tr>
<td><strong>public</strong></td>
<td>Acceso no restringido.</td>
</tr>
<tr>
<td><strong>protected</strong></td>
<td>Acceso limitado a la clase contenedora o a los tipos derivados de esta clase.</td>
</tr>
<tr>
<td><strong>internal</strong></td>
<td>Acceso limitado al proyecto actual.</td>
</tr>
<tr>
<td><strong>protected</strong> <strong>internal</strong></td>
<td>Acceso limitado al proyecto actual o a los tipos derivados de la clase contenedora.</td>
</tr>
<tr>
<td><strong>private</strong></td>
<td>Acceso limitado al tipo contenedor.</td>
</tr>
</tbody>
</table>
</div>
<p>Información obtenida de Msdn: <a href="http://msdn.microsoft.com/es-es/library/ba0a1yw2(VS.80).aspx">http://msdn.microsoft.com/es-es/library/ba0a1yw2(VS.80).aspx</a></p>
<p>Las clases definidas sin estar contenidas dentro de otras, es decir, definidas dentro de un namespace solo podrán utilizar los modificadores <strong>public</strong> e <strong>internal</strong>.</p>
<p>Las clases definidas como <strong>public</strong> serán instanciables desde cualquier otra clase o proyecto. En el ejemplo: OtraClase.</p>
<p><strong>Internal</strong> restringe la visibilidad de una clase a aquellas que se encuentran en el mismo ensamblado o proyecto desde la que se desea instanciar. En el ejemplo: la clase B es interna del proyecto ClasesModificadores con lo que no se puede instanciar desde el proyecto Modificadores.</p>
<p>Por otro lado, como sabemos, dentro de una clase podemos definir a su vez nuevas clases. En este caso tendremos disponibles todos los modificadores. En el ejemplo: ClasesAnidadas.</p>
<p>El modificador <strong>private</strong> obliga a usar la clase dentro de la clase en la que está definido.</p>
<p><strong>Protected </strong>amplia la restricción de private permitiendo usar la clase en aquellas que hereden de la contenedora.</p>
<p>Por último <strong>protected internal</strong> combina las dos definidas anteriormente.</p>
<p>Y como siempre para verlo mas clarito, usemos el ejemplo que os dejo a continuación.</p>
<p><a href="http://elmundodelasideas.files.wordpress.com/2008/10/screenshot001.png"><img class="size-medium wp-image-64" title="Modificadores de clases" src="http://elmundodelasideas.wordpress.com/files/2008/10/screenshot001.png?w=300" alt="Ejemplos" width="300" height="166" /></a></p>
<p> Enlace para descargar el código del ejemplo: <a href="http://elmundodelasideas.files.wordpress.com/2008/10/modificadores.doc">modificadores</a> (renombrar el archivo a .zip y descomprimir).</p>
<p>Espero que os sirva.</p>
<p>Salu2, Guillermo.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Classes desburocratizadas: Fim dos getters e setters pobres]]></title>
<link>http://qualquertecla.wordpress.com/2008/07/17/classes-desburocratizadas-fim-dos-getters-e-setters-pobres/</link>
<pubDate>Thu, 17 Jul 2008 14:04:50 +0000</pubDate>
<dc:creator>alexeiaguiar</dc:creator>
<guid>http://qualquertecla.wordpress.com/2008/07/17/classes-desburocratizadas-fim-dos-getters-e-setters-pobres/</guid>
<description><![CDATA[Para expor o estado interno dos objetos ao mundo exterior, algumas linguagens se valem de um conceit]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Para expor o estado interno dos objetos ao mundo exterior, algumas linguagens se valem de um conceito chamado propriedade. Vou começar falando das linguagens que não tem propriedades como o Java. Estas linguagens  consideram que as variáveis e constantes tem propósito apenas interno, apesar de poderem ser declaradas como públicas. Caso caiamos na tentação de usá-las como membros públicos para simplificar e desburocratizar a programação, compramos uma dor-de-cabeça futura.</p>
<p>O problema nesta abordagem é que quebrarmos o encapsulamento, expondo o interior do objeto como ele realmente é. Assim, se a representação interna mudar, obrigatoriamente, os clientes externos vão ser afetados. Isso é o indesejado alto acomplamento que propaga as alterações e amarra os objetos, reduzindo o reuso. Também temos o problema de não podermos controlar a atribuição, fazendo validações. Assim, podemos ter <span style="color:#000000;"><strong>aluno.nota = 11</strong></span> ! Outra possibilidade é engessar a classe. A própria Sun cometeu uma gafe ao criar a classe <span style="color:#000000;"><strong><span>java.awt.Rectangle</span></strong></span> com campos públicos. Daí, depois não pôde evitar que façamos um <span style="color:#000000;"><strong>rect.height = -100</strong></span>, que é bastante esquisito ! O retângulo é tão baixo que o topo está abaixo da base ?!?! E se ela os transformasse em campos privados quebrando a compatibilidade ? Já pensou ter que pedir para os usuários não fazerem upgrade de jvm porque senão o programa não vai mais rodar ? Por causa disso, espalhamos uma porção de <em>getters</em> e <em>setters</em> pelo código da classe por pura burocracia. O Java herdou essa filosofia do C++.</p>
<p>O conceito de propriedades não é nada novo, nem revolucionário. O velho Delphi já tinha propriedades. Para não mexer com a poeira do fundo do baú, vamos deixar o Delphi de lado e ver como o Scala expõe o estado interno sem burocracia e com escalabilidade: &#8220;Tornar o simples fácil e o difícil possível&#8221;.</p>
<p>Suponha o mesmo caso da classe Rectangle. Vejamos como ficaria a classe com a suposta quebra de encapsulamento:</p>
<pre class="brush: java;">
class Rectangle {
   var x, y, width, height: Int
}

val rect = new Rectangle
rect.height = -100
</pre>
<p>Então, percebido o erro depois de esta classe estar sendo usada em vários programas, precisamos corrigi-lo. Felizmente, Scala tem um mecanismo sofisticado para permitirmos interferir na leitura e gravação da variável, sem alterar o uso externo da mesma. Vejamos como ficaria:</p>
<pre class="brush: java;">
Class Rectangle {
    var x = 0
    var y = 0
    private var pwidth = 0
    private var pheight = 0

    def width_=(arg: Int) {
      if (arg &lt; 0) throw new IllegalStateException(&quot;width não pode ser menor que zero&quot; )
      pwidth = arg
    }
    def width = pwidth

    def height_=(arg: Int) {
      if (arg &lt; 0) throw new IllegalStateException(&quot;height não pode ser menor que zero&quot; )
      pheight = arg
    }
    def height = pheight
  }

val rect = new Rectangle
rect.height = -100  // Causa uma IllegalArgumentException
</pre>
<p>Assim, ganhamos o controle  quando precisarmos, garantindo a manutenção da interface externa da classe para os clientes dela. É admissível que x e y possam receber valores negativos por estarem à esquerda do eixo y ou abaixo do eixo x. Assim, não precisamos da burocracia e poluição de <em>getters</em> e <em>setters</em> pobres desnecessários mas requeridos nas linguagens que não tem propriedades.</p>
<p><span style="color:#000000;"><strong><span>Bonus track</span></strong></span></p>
<p>Por baixo dos panos, no bytecode, na verdade todos os campos ficam privados e têm os métodos de leitura e escrita.Vejam como ficou a classe Rectangle &#8220;descompilada&#8221; (sem implementação) para Java:</p>
<pre class="brush: java;">
public class scalaintegration.Rectangle
   extends java.lang.Object implements scala.ScalaObject{
 private int pheight;
 private int pwidth;
 private int y;
 private int x;
 public scalaintegration.Rectangle();
 public int height();
 public void height_$eq(int);
 public int width();
 public void width_$eq(int);
 private void pheight_$eq(int);
 private int pheight();
 private void pwidth_$eq(int);
 private int pwidth();
 public void y_$eq(int);
 public int y();
 public void x_$eq(int);
 public int x();
 public int $tag();
 }
</pre>
<p style="text-align:right;">Alexei Barbosa de Aguiar</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Modificadores de Acesso em Java]]></title>
<link>http://wmagician.wordpress.com/2008/01/08/modificadores-de-acesso-em-java/</link>
<pubDate>Tue, 08 Jan 2008 00:46:25 +0000</pubDate>
<dc:creator>wmagician</dc:creator>
<guid>http://wmagician.wordpress.com/2008/01/08/modificadores-de-acesso-em-java/</guid>
<description><![CDATA[Modificadores de Acesso Modificadores de Acesso controlam a forma como os membros de uma classe são ]]></description>
<content:encoded><![CDATA[Modificadores de Acesso Modificadores de Acesso controlam a forma como os membros de uma classe são ]]></content:encoded>
</item>
<item>
<title><![CDATA[Modificadores de formas]]></title>
<link>http://miprogramacionenjuegos.wordpress.com/2006/12/27/modificadores-de-formas/</link>
<pubDate>Wed, 27 Dec 2006 18:22:56 +0000</pubDate>
<dc:creator>estados</dc:creator>
<guid>http://miprogramacionenjuegos.wordpress.com/2006/12/27/modificadores-de-formas/</guid>
<description><![CDATA[_x Mueve el objeto en pixeles horizontalmente _y Mueve el objeto en pixeles verticalmente _xscale Mo]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><table border="0" cellpadding="0" cellspacing="0" width="463">
<tr>
<td style="width:50%;"><em><strong>_x</strong></em></td>
<td style="width:50%;">Mueve el objeto en pixeles horizontalmente</td>
</tr>
<tr>
<td style="width:50%;"><em><strong>_y</strong></em></td>
<td style="width:50%;">Mueve el objeto en pixeles verticalmente</td>
</tr>
<tr>
<td style="width:50%;">_xscale</td>
<td style="width:50%;">Modifica el % de la escala en horizontal</td>
</tr>
<tr>
<td style="width:50%;">_xscale</td>
<td style="width:50%;">Modifica el % de la escala en vertical</td>
</tr>
<tr>
<td style="width:50%;">_alpha</td>
<td style="width:50%;">Modifica Transparencia</td>
</tr>
<tr>
<td style="width:50%;"><em>_width</em></td>
<td style="width:50%;">Modifica Anchura</td>
</tr>
<tr>
<td style="width:50%;"><em><strong>_height</strong></em></td>
<td style="width:50%;">Modifica Altura</td>
</tr>
<tr>
<td style="width:50%;"><em><strong>_rotation</strong></em></td>
<td style="width:50%;">Rota x cantidad de grados</td>
</tr>
<tr>
<td style="width:50%;"><em><strong>_color</strong></em></td>
<td style="width:50%;">color pero no estoy seguro que funcione</td>
</tr>
<tr>
<td style="width:50%;"><strong><span class="azul">_visible</span></strong></td>
<td style="width:50%;">true o false</td>
</tr>
</table>
</div>]]></content:encoded>
</item>

</channel>
</rss>
