Orientação à Objetos em Delphi (Parte 1 e 1/2)

Aug 27
2010

Apesar do povo no twitter querer me massacrar quando digo que o Delphi é uma linguagem (muito boa por sinal), há muito que ele não trata mais de Pascal com uma IDE bonitinha. Mas como eu respondi lá, isso é uma questão comercial, que pouco me importa, afinal, não ganho ou perco um centavo com isso. Quanto a linguagem ser boa, não há dúvidas, com ela eu construi minha casa, estou pagando o carro, os meus treinamentos, a educação do meu filho…

Piadas à parte, vamos ao ponto, no último post que eu tratei sobre o assunto (Orientação à Objetos) a coisa ficou meio descontextualizada, principalmente por se tratar de uma palestra que fiz aqui na Produtec. Assim, vou tentar simplificar um pouco mais o conceito, sem necessariamente entrar na conversa com o banco.
Primeiro vamos imaginar um problema. Alguém lhe fez a solicitação:

Criar uma classe Lampada, que tenha como ser ligada, desligada e possa me responder seu atual estado (ON/OFF). Essa pessoa lhe solicitou também um formulário que interagisse com essa classe, acessando os seus métodos.

Então vejamos, temos uma classe mais ou menos como a desenhada abaixo:


Como vemos, teremos então a classe Lampada, que possuirá um atributo privado chamado acesa do tipo boleano e três métodos públicos bastante simples; ligarLampada() muda o atributo acesa para true, desligarLampada() seta o atributo para false e isLampadaLigada() que retorna o estado do atributo. Até aqui bem simples.
Para a implementação eu vou herdar de TControl, por enquanto isso será suficiente, afinal não quero ter que implementar as coisas mais básicas na mão, como a criação do componente e tal. Isso fica mais ou menos assim:

unit uLampada;

interface

uses Controls;

type
  TLampada = class(TControl)
  private
      Facesa: Boolean;
      procedure Setacesa(const Value: Boolean);
      property acesa: Boolean read Facesa write Setacesa;
  public
      procedure LigarLampada;
      procedure DesligarLampada;
      function isLampadaLigada: Boolean;
  end;

implementation

{ TLampada }

procedure TLampada.DesligarLampada;
begin
   acesa := False;
end;

function TLampada.isLampadaLigada: Boolean;
begin
   Result := acesa;
end;

procedure TLampada.LigarLampada;
begin
   acesa := True;
end;

procedure TLampada.Setacesa(const Value: Boolean);
begin
   Facesa := Value;
end;

end.

Percebam aqui algumas particularidades do Delphi. Pra começar, os métodos tem um “tipo”. Métodos que necessitam retornar valores são declarados como function e os que não precisam retornar valor, portanto são somente procedimentos, são assim chamados procedure. Ambos podem receber parâmetros, mas no nosso exemplo não tivemos necessidade. A única diferença é mesmo o retorno.

Para declarar a propriedade acesa, eu simplesmente digitei property acesa:boolean; e pressionei o atalho Ctrl+Shift+C. Isso nos leva a outro ponto legal de destacar que é o encapsulamento. Veja como ficou o código:

  private
      Facesa: Boolean;
      procedure Setacesa(const Value: Boolean);
      property acesa: Boolean read Facesa write Setacesa;

Assim, na prática, o valor será gravado em Facesa (o “F” é padrão do Delphi, não pergunte). Como se percebe ele completou a linha com as cláusulas read e write, determinado assim o Getter e o Setter da propriedade acesa. Portanto quando uma chamada um outro objeto acessar a propriedade acesa, a classe irá ler o valor da variável Facesa e na hora de atribuir o valor, o procedimento Setacesa(const Value: Boolean);.

A cláusula const antes do parâmetro indica que o mesmo não pode ser alterado no corpo do procedimento. Ele pode ser atribuído normalmente na chamada.

Com o procedimento SetAcesa podemos colocar quaisquer tratamentos que se fizerem necessários. Mas isso é assunto para outro post.

Para a aplicação rodar como pedido, devemos criar um formulário que interaja com um objeto da classe criada. Vou não criar muita firula aqui, serão apenas 3 botões, Ligar, Desligar e Status.

Aqui fica mais clara ainda a simplicidade desse sistema. Basta criar uma instância da classe TLampada e fazer com que os botões acessem os seus métodos. Veja como ficou simples.

unit uInterruptor;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, uLampada;

type
  TfrmInterruptor = class(TForm)
    btnLigar: TButton;
    btnDesligar: TButton;
    btnStatus: TButton;
    procedure btnStatusClick(Sender: TObject);
    procedure btnDesligarClick(Sender: TObject);
    procedure btnLigarClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    MinhaLampada: TLampada;
  public
  end;

var
  frmInterruptor: TfrmInterruptor;

implementation

{$R *.dfm}

procedure TfrmInterruptor.btnDesligarClick(Sender: TObject);
begin
   MinhaLampada.DesligarLampada;
end;

procedure TfrmInterruptor.btnLigarClick(Sender: TObject);
begin
   MinhaLampada.LigarLampada;
end;

procedure TfrmInterruptor.btnStatusClick(Sender: TObject);
var
   cMsg: String;
begin
   cMsg := 'A lâmpada ';

   if not MinhaLampada.isLampadaLigada then
      cMsg := cMsg + 'não ';

   cMsg := cMsg + 'está ligada.';
   ShowMessage(cMsg);
end;

procedure TfrmInterruptor.FormCreate(Sender: TObject);
begin
   MinhaLampada := TLampada.Create(Self);
end;

end.

A única dica é criar a MinhaLampada na criação do formulário. Não preciso me preocupar com dispor dela, pois ela foi criada “afiliada” ao form, portanto quando um for para o vinagre o outro vai junto.

Bom pessoal, agora que desaceleramos e começamos de maneira mais básica acho que consegui isolar um pouco mais os conceitos. Acredito que todos entendem que temos uma classe TLampada, com atributos privados, com métodos públicos que nos permitem controlar a lâmpada. Esclarecemos também que o que se manipula posteriormente é a instancia, o objeto MinhaLampada, não a classe. E podemos ter quantas instancias da Lampada criadas dentro da nossa aplicação.

No próximo post sobre o assunto vamos criar um serviço que controle a “energia” do exemplo. Até lá.

Porque não programamos em casa?

Aug 23
2010

Delphi orientado à objetos – parte 1

Jul 27
2010

Já tem um bom tempo que programo com Delphi. E sempre ouvi críticas pesadíssimas sobre o quanto a linguagem é ruim. Eu sempre acreditei que existiram sempre programadores ruins e que os programas saiam ruins, o que gerou essa impressão negativa, bem como os vários problemas que a Borland (fabricante do Delphi, agora CodeGear) impôs nas mudanças de versão. Assim, resolvi desmistificar essa coisa de que é impossível programar orientado à objetos usando o Delphi.

Segue o material do nosso último treinamento, sobre como usar o Delphi, orientado à objetos.
Embora pareça que estamos trabalhando com OO desde sempre, afinal instanciamos objetos baseados em classes, isso não é inteiramente verdade.
Como me disse um professor certa vez: “Seu sistema é orientado à objetos? Ótimo. Me mostre a sua classe NotaFiscalSaída.”

Assim achei por bem usar um exemplo bem simples, estados e cidades para mostrar o poder que o Delphi tem e de quebra demonstrar que o que está errada é a maneira como programamos e não a linguagem que usamos, seja ela qual for.
Read the rest of this entry »

Foco na solução?

Jul 27
2010

Um paciente vai num consultório psicológico e diz pro doutor:
- Toda vez que estou na cama, acho que tem alguém embaixo.
Aí eu vou embaixo da cama e acho que tem alguém em cima. Pra baixo, pra  cima, pra baixo, pra cima.
Estou ficando maluco!
- Deixe-me tratar de você durante dois anos. -diz o psicólogo.
- Venha três vezes por semana, e eu curo este problema.
- E quanto o senhor cobra? – pergunta o paciente.
- R$ 120,00 por sessão – responde o psicólogo.
- Bem, eu vou pensar – conclui o sujeito. Passados seis meses, eles se encontram na rua.
- Por que você não me procurou mais? – pergunta o psicólogo.
- A 120 paus a consulta, três vezes por semana, dois anos, ia ficar caro  demais, ai um sujeito num bar me curou por 10 reais.
- Ah é? Como? – pergunta o psicólogo.
O sujeito responde:
- Por R$ 10,00 ele cortou os pés da cama…
Muitas vezes o problema é sério, mas a solução pode ser muito simples!

HÁ GRANDE DIFERENÇA ENTRE FOCO NO PROBLEMA E FOCO NA SOLUÇÃO!!!

Heróis de Verdade

Sep 04
2009

A revista ISTO É publicou esta entrevista de Camilo Vannuchi. O entrevistado é Roberto Shinyashiki, médico psiquiatra, com Pós-Graduação em administração de empresas pela USP, consultor organizacional e conferencista de renome nacional e internacional.

Em ’Heróis de Verdade’, o escritor combate a supervalorização das aparências, diz que falta ao Brasil competência, e não auto-estima.

Read the rest of this entry »

Dez idéias para motivar sua equipe sem gastar dinheiro

May 29
2009

Geralmente, temos três cenários quando o fim do ano se aproxima: a empresa que está muito bem, vendeu muito, cresceu, ganhou e fidelizou clientes; a empresa que está mais ou menos, perdeu alguns clientes, ganhou um pouco, mas vendeu o suficiente para pagar as contas, não conseguindo grandes lucros; e a empresa que foi mal, cujos clientes foram comprar da concorrência e o lucro é apenas uma hipótese pouco provável.

A verdade é que todas as empresas, não importa em que cenário se encaixam, precisam motivar seus vendedores para o final do ano. Para algumas, esse é um período de altos volumes de vendas – isso geralmente acontece com o varejo – e, para outras, é um período de poucos negócios.
Porém, mesmo que você esteja ganhando muito dinheiro no início deste ano, que esteja programando uma comemoração regada a champagne francês, você certamente vai adorar motivar sua equipe gastando pouco.

Existem muitas coisas que podem ser feitas sem nenhum – ou quase nenhum – dinheiro para estimular a equipe. Vejamos dez idéias diferentes que podem ser, agora mesmo, facilmente colocadas em prática em sua empresa:
Read the rest of this entry »

Um pouco de bom senso sempre é bom

May 19
2009

18 de maio de 2009, 17:45 – Link Original

Redes sociais são legais, mas os criadores de conteúdo tem que entender que isso não significa que as pessoas se cadastram em qualquer coisa que aparece. E o cliente pedindo um Orkut no site dele.

Por Fernanda Martins

Sei que não sou referência para muita coisa, meus gostos não são comuns. Mas cada vez mais me sinto incomodada com as redes sociais.

Não com o Orkut, Facebook ou Linkedin. O que me irrita é essa moda de redes sociais, de todo site, toda marca, todo mundo querer ter a sua rede social.

Ok, o Brasil é o país das redes sociais. Maior número de usuários no Orkut, invadindo outras redes como Myspace, Facebook, Twitter, Hi5, Sonico… Isso não significa que as pessoas se cadastram em qualquer coisa que aparece, e é isso que os criadores de conteúdo tem que entender.

Todo site de culinária tem uma rede social para troca de receitas. Todo site feminino tem uma rede social para as usuárias trocarem experiências. Sites para mães têm redes sociais para que falem sobre a educação de seus filhos.

Não digo que isso não é útil. Todo mundo gosta de dividir experiências, contar histórias, passar receitas, mostrar conhecimento. Mas precisamos fazer isso sempre da mesma forma, dentro do mesmo formato? E sinceramente, responda: toda vez que você se inscreve em uma rede social dentro de algum site, quantas vezes você volta? Aliás, você se lembra de todos os perfis que você tem? Mantêm todos eles ativos?

A verdade é que se tornou tão bonito falar em “fazer coisas diferentes” e “interagir com o consumidor, participar” que social media virou moda. E como todo mundo associa social media com rede social, e rede social é a mesma coisa que Orkut aqui no Brasil, todos querem um Orkut dentro do seu site.

Ninguém se preocupa em realmente inovar? Em pensar algo diferente de verdade?

Como tudo na vida, as coisas só são grandes ideias quando estão dentro de um contexto, quando fazem sentido ou são necessárias. Fora isso, são só ideias. E as ideias que tenho visto por aí são medíocres.

E aí você está trabalhando, se esforçando para sair do medíocre e pensar algo que funcione, que seja diferente, e ouve alguém que deveria entender tanto de tendências quanto você (talvez até mais) sugerir “poxa, podemos criar uma rede social”. O que você faz?

Que fique claro: social media é uma das coisas mais incríveis da atualidade. É psicologia pura, estudo e entendimento de comportamento humano na forma mais primordial que existe, e isto é fascinante. E, analisando do ponto de vista publicitário, é uma ferramenta sem precedentes – desde que se saiba usar. Não existe nada mais desestimulante do que ver as pessoas encarando isso como fazem com TV, em formatinhos pré-determinados de 5, 15 ou 30 segundos.

Não existe receita para mídias sociais, e nem tiros certos. É algo a ser muito bem pensado, caso a caso. E dói ver a banalização com que as pessoas pensam nisso – seja aquelas que querem encontrar o pixel mágico que faz os vídeos viralizarem (assim, se economiza criando um comercial de TV bem besta, para ser visto no YouTube algumas mil vezes), ou as que são profissionais da publicidade e trabalham em grandes agências, mas que aparentemente enfiam Twitter, Blip e Orkut em qualquer job que entre na pauta. [Webinsider]

A importância do planejamento

May 13
2009

Vamos encarar os fatos: poucos são aqueles que sabem elaborar um projeto. E dessa vez não estou falando especificamente de software, mas também dele.

Quantas vezes você se pegou mexendo na sua agenda, atualizando, verificando a semana seguinte, especulando que atos vão levar até seus objetivos?

Sabem, ontem eu tive uma revelação. Uma visão do profissional do futuro por assim dizer. Estava eu em uma aula de TCC, há 13 dias da próxima fase de entrega.

Read the rest of this entry »

A melhor linguagem de programação é o programador

May 07
2009

Original de Carlos Brando

Quem acha que o mercado de software se resume à programadores e ao simples ato de escrever código não poderia estar mais enganado. Desenvolvimento de software tem tudo a ver com paixão.

Escolher uma linguagem de programação é quase como uma religião para muitos. Longas discussões são travadas sobre qual é a melhor linguagem ou sobre qual é a melhor metodologia a ser utilizada. Como se adotar uma determinada linguagem, ou uma ferramenta especifica fosse a resposta para o sucesso de um projeto ou a solução para o crescimento de sua empresa.

Read the rest of this entry »

O que a faculdade faz?

May 06
2009

Não sei se eu comentei por aqui, mas eu faço faculdade de Sistemas para a Internet, no CESUMAR, aqui em Maringá. É um curso ótimo que ajuda a desenvolver as habilidades para fazer sistemas online. Reparem na palavra, “AJUDA”. Você tem um custo, perde seu tempo e não vai sair da faculdade sabendo fazendo nem um site se não correr atrás.

Ai você me pergunta:

Pô Juliano, então você está me dizendo que eu to jogando meu dinheiro fora? Que se eu quiser realmente aprender vou ter de me virar?

Read the rest of this entry »

Arquivo

Categorias