Gregui Shigunov


Programação orientada a Objetos – Boas práticas de programação (1)

Tenho participações em fóruns como JavaFree e PortalJava. E notei que muitos programadores se “batem” com orientação a objetos, mesmo utilizando uma linguagem Orientada a Objetos como Java, Flex, Php.

Tentarei trazer dicas de orientação a objeto e boas práticas de programação, utilizando exemplos simples para o fácil entendimento. No momento estou bem ocupado, então posso demorar para postar coisas novas! ;)

Então…

Notem este código:
public class Motor {

}

public class Carro {
private Motor motor = new Motor();

     //construtora
public Carro(Motor motor) {
this.motor = motor;
}
}

Um exemplo muito simples, com dois objeto (Carro e Motor);

Agora, notem…
- A contrutora da classe “Carro”, informa (obriga) que um “Carro” tenha um “Motor”.
- Então antes de instanciar um carro, eu preciso instanciar um motor (motor pode ser “null”, nulo).
- Quando eu contruir um carro, eu incluo o motor no carro, mas notem a linha 2:
private Motor motor = new Motor();
- Se a construtora de “Carro” me obriga ter um “Motor”, por que diabo ela já tem um motor construído?

É mais ou menos como: “Vou contruir um carro 2.0, mas o carro já possuí um motor 1.0, então terei que tirar o motor 1.0, e substituir pelo 2.0″
(No mundo real isso é bom, já que eu teria um motor sobrando, mas … na programação há disperdício de processamento e memória para criar o motor 1.0, já que foi contruído e não foi utilizado)

- Agora você deve se perguntar, grande coisa… Não vai fazer muita diferença.
- Para um exemplo simples como esse sim, mas imagine um sistema complexo, com classe gigantes e complexas

Agora olhem a classe abaixo:

public class Carro {
private Motor motor = null;

    //construtora
public Carro(Motor motor) {
this.motor = motor;
}
}

No carro eu “declarei” mas não “instanciei” o Motor.
É mais ou menos como: “tenho um carro, agora só falta o motor (reservei espaço para o Motor)”

Uma outra Boa Prática de Programação (BPP) é, sempre informar o valor da variável ao declará-la.
Como no exemplo abaixo

Exemplo de utilização:

Motor motor_1; //não recomendado
Motor motor_2 = null; //OK
Motor motor_3 = new Motor(); //OK

motor_1 = new Motor();
motor_2 = new Motor();

Carro corsa = new Carro(motor_1);
Carro corsa_sedan = new Carro(motor_2);

Até a próxima ;)

(FLEX) Fixando o tamanho de um DividedBox

Enviado em Flex, Programação por Gregui Shigunov no 19 19UTC Setembro 19UTC 2007
Tags: , , , , , , , ,

Um amigo hoje me perguntou como fazer para fixar o botão de um DividedBox. Fazendo com que o usuário não consiga redimencionar a área!

Para fixar a área, ou apenas limitar o tamanho de um componente, basta configurar

as seguintes propriedades:

explicitHeight: tamanho fixo para altura do componente
explicitWidth: tamanho fixo para largura do componente
explicitMaxHeight: tamanho máximo para altura do componente
explicitMaxWidth: tamanho máximo da largura do componente
explicitMinHeight: altura minimo do componente
explicitMinWidth: largura minima do componente

Estas propriedades podem ser utilizada em praticamento todos (se não for realmente todos) os componentes!

Não vou me ater a detalhes, pois estou meio ocupado!

qualquer dúvida, me mande um email…

Upload de Arquivo com FLEX

Enviado em Flex, PHP, Programação por Gregui Shigunov no 17 17UTC Setembro 17UTC 2007
Tags: , , , , , , , ,

Ai vai um exemplo de aplicação FLEX para fazer upload de arquivos!


<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute”>

<mx:Script>
<![CDATA[
import mx.controls.Alert;

private fileRef:FileReference = null;
(mais…)

Timer para aplicação Flex

Enviado em Flex, Programação por Gregui Shigunov no 11 11UTC Setembro 11UTC 2007
Tags: , , , , , ,

Exemplo de classe que executa um método a cada tempo

<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml”
creationComplete=”init();“>

<mx:Script>
<![CDATA[

import mx.controls.Alert;

private var timer:Timer = null;

private function init():void {
this.timer = new Timer( (60 * 1000) , (60 * 2) );
timer.addEventListener("timer", this.executa);
timer.start();
}

public function executa(event:TimerEvent):void {
Alert.show("Chamando método");
}

]]>
</mx:Script>
</mx:Application>

No exemplo, o método execute será chamado 120 (60 * 2) vezes a cada 60 segundos (60 * 1000) .

Mudando dinamicamente o Estilo de componentes em Flex

Enviado em Flex, Programação por Gregui Shigunov no 10 10UTC Setembro 10UTC 2007
Tags: , , , , , , , , , ,

Opa! Mas algumas horas tentando fazer algo hipoteticamente simples!

Estava tentando carregar um estilo (css) no flex, dinamicamente. Tentei de tudo e pesquisei de tudo

(<mx:Style />, CSSStyleDeclaration, setStyle, clearStyle, styleDeclaration, getClassStyleDeclarations) e nada!

Mas… depois de algum tempo, e muita pesquisa…

Eureka!!!!

Então vamos lá:

(mais…)

Clonando objetos em Flex

Enviado em Flex, Programação por Gregui Shigunov no 10 10UTC Setembro 10UTC 2007

A algum tempo atrás eu estava com um problema em flex, onde eu precisava duplicar um objeto em flex!

Eu tinha uma VBox contendo um lista de objetos em seu dataProvider. Estava utilizando o recurso de arratar e soltar!

Esse objeto arrastado devia ir pra dentro de um TileList.

O problema, quando eu clicava duas vezes dentro de um elemento da tileList, eu poderia configurar alguns parametros no objeto, mas… A tileList poreria receber N vezes o mesmo elemento, e como no flex, tudo é por referência, tudo que eu alterava num elemento da lista, na verdade estava alterando em todos os elementos, já que era o mesmo objeto!

Para resolvet o problema, usei a seguinte classe:

package gregui

{
import flash.utils.ByteArray;

public class CloneObjet
{

/**
* Clona um Objeto

* @return object
*/
public static function clonar(o:Object):Object {

(mais…)