Dia do torcedor flamenguista


De autoria do vereador Jorge Mauro, o "Dia do Flamenguista" passou a vigorar desde 15 de outubro de 2007, passando assim a fazer parte do calendário oficial da cidade do Rio de Janeiro, motivo de orgulho e festa para o Cidadão Carioca. Naquela mesma semana, uma pesquisa divulgada pela CNT/Sensus, mostrou que o Flamengo é o time de futebol com maior torcida do País. O clube da Gávea lidera o ranking com 14,4% dos torcedores do Brasil. Logo atrás vem o Corinthians, com 10,5% dos votos, à frente de São Paulo, que em terceiro, tem 8%, e Palmeiras, em quarto, com 7,2% do total pesquisado.
A data dedicada à torcida rubro-negra será comemorada todo dia 28 de outubro, mesmo dia do padroeiro do Flamengo, São Judas Tadeu.

cristo rubro negro

Como já dizia Nelson Rodrigues: “Existem dois tipos de torcedores: os que já descobriram que são Flamengo e os que ainda não descobriram”.

Bondinho do Pão de Açúcar completa 97 anos


Em 1912, há 97 anos atrás, 500 pessoas pagaram a quantia de 2.500 réis para fazer a viagem de inauguração do Bondinho do Pão de Açúcar. Para a época o evento representava a última palavra em tecnologia e tinha origem alemã, até então somente Suíça e Espanha possuíam tal atrativo turístico. Desde então 37 milhões de pessoas já fizeram essa mesma viagem, dentre elas, ilustres personagens como ex-presidente John Kennedy, o cientista Albert Einstein, o cantor britânico Sting, e a atriz Brokie Shield.
As duas rotas disponíveis ligam a base do Morro da Babilônia ao Morro da Urca (distância de 600m onde a velocidade máxima chega a 21,6Km/h) e a outra liga o Morro da Urca ao Morro do Pão de Açúcar (distância de 850m, onde a velocidade máxima pode chegar a 36Km/h), essa segunda foi eleita umas das Sete Maravilhas do Rio de Janeiro anos atrás. O tempo de passeio não ultrapassa os 5 minutos em cada trajeto, o bondinho tem capacidade de levar em cada viagem aproximadamente 65 passageiros.
As comemorações de hoje que incluem até mesmo uma fatia de bolo de aniversário para os visitantes que comparecerem para fazer o passeio e homenagearam dessa forma essa atração que é um cartão postal do Rio de Janeiro.

Apareçam por lá!

Site Oficial do Bondinho:
Bondinho Pão de Açúcar

Fotos do bondinho:



Marcando o Filho e o Pai ( TJvCheckTreeView )


Amigos um companheiro de programação fez essa pergunta no Grupo Delphi-BR (grupo dedicado a Delphi do Yahoo, muito bom! Eu recomendo!), então dei uma fuçada, pois utilizo a biblioteca do Jedi ( também recomendo) e como já utilizei esse componente ( nossa de novo eu recomendo!)  acabei achando uma solução para o caso. A pergunta dele era a seguinte:
“Colegas,
Utilizando um JvCheckTreeView, gostaria de, ao checar um item filho, também
checar o item pai. Alguém sabe como fazer?
Grato”

E a solução encontrada foi, no evento JvCheckTreeView1Click adicionar o código abaixo, lógico que a partir daqui você poderá refinar a rotina, experimente implementar que ao retirar a marcação de todos os filhos, a rotina retire também a marcação do item pai.

procedure TForm23.JvCheckTreeView1Click(Sender: TObject);
var
  Node : TJvTreeNode;
begin
  if TJvTreeNode(JvCheckTreeView1.Selected).Checked then
  begin
    Node := TJvTreeNode(JvCheckTreeView1.Selected.Parent);
    Node.Checked := True;
  end;
end;


Espero mais uma vez estar ajudando!


Boa sorte e abs!

Desmitificando as Interfaces em Delphi


Amigos quero mostrar para vocês o que é, e como podemos utilizar as interfaces no Delphi de forma que facilite nossa difícil vida de programador.

O que é interface?

As interfaces foram introduzidas na linguagem Object Pascal na versão 3 do Dephi, passando a partir desse momento a ser trabalhada de forma nativa. Vocês não fazem idéia de quão significativo foi isso! Então alguns irão perguntar:  "Mas como se vivia sem as interfaces antes disso ?" E eu respondo: Criando classes que não eram implementadas, mas que declaravam seus métodos para serem implementados pelas classes descendentes. Claro que você já esbarrou com um código desses, mas não deu atenção. Veja a declaração abaixo e me diga se você já não viu e talvez implementou algo parecido.

Type
TBrasileiro = class
public
function Trabalhar:Boolean; virtual; abstract;
function PagarImpostos:Boolean; virtual; abstract;
end;


O código acima define os métodos que a classe descendente deverá implementar. Podemos dessa maneira facilmente definir a nossa interface com base nos requisitos acima.







Type
IBrasileiro = Interface
['{31A22D9F-E857-4892-9D17-79FBE9AA7237}']
function Trabalhar:Boolean;
function PagarImpostos:Boolean;
end;


Dessa maneira podemos dizer que as interfaces são as "normas contratuais" que regem como nossa classe será definida e como deverá ser utilizada, tanto do lado do implementador como do lado do cliente. As classes podem implementar diversas interfaces, isso possibilita que uma classe "simule" a herança múltipla no Object Pascal.









Façamos agora duas observações quanto ao código acima!



Primeiramente vocês vão reparar que temos uma Sting enorme denominada de Globally Unique Identifier (GUID), no exemplo temos  ['{31A22D9F-E857-4892-9D17-79FBE9AA7237}']  ), essa string pode ser gerada automaticamente no IDE do Delphi utilizando as teclas Ctrl+Shift+G, e servirá para identificar de forma única a nossa interface. Por enquanto é tudo que precisam saber sobre essa numeração.


Posteriormente você verá que não foi utilizado especificadores de visibilidade ( private, protected, public, lembra deles ?), isso porque todos os métodos declarados numa interface são públicos por default.







De onde vem ?






Sei que você já sabe disso, mas vou comentar mesmo assim: Todas as classes em Delphi descendem de TObject, isso de maneira implícita, da mesma forma as interfaces na linguagem object pascal descendem de forma implícita de IInterface, podemos ver sua definição na Unit System. Você verá a declaração de TInterfacedObject, falarei dessa classe mais a frente quando aparecer no nosso exemplo.






type
IInterface = interface
['{00000000-0000-0000-C000-000000000046}']
function QueryInterface(const IID: TGUID;
out Obj): HResult; stdcall;
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
end;

IUnknown = IInterface;
{$M+}
IInvokable = interface(IInterface)
end;
{$M-}


{ TInterfacedObject provides a threadsafe default
implementation of IInterface.You should use TInterfaceObject
as the base class of objects implementing interfaces.; }

TInterfacedObject = class(TObject, IInterface)
protected
FRefCount: Integer;
function QueryInterface(const IID: TGUID;
out Obj): HResult; stdcall;
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
public
procedure AfterConstruction; override;
procedure BeforeDestruction; override;
class function NewInstance: TObject; override;
property RefCount: Integer read FRefCount;
end;



Como é a vida com as interfaces?


Bom agora que você já sabe quando as interfaces ficaram disponíveis no Delphi, como era a vida antes dela, vamos ver como é a vida com elas. Vamos implementar duas interfaces simples, observe o  exemplo abaixo.





ITrabalhador = Interface
['{31A22D9F-E857-4892-9D17-79FBE9AA7237}']
function Trabalhar:Boolean;
function PagarImpostos:Boolean;
end;

ISerHumano = interface
['{29D48E8C-EFF0-461C-9B9E-D5D7478E5B87}']
function AndarEreto:Boolean;
function Falar:Boolean;
procedure Ouvir;
procedure Correr;
end;



Basicamente podemos declarar nossa classe como:




TBrasileiro = class(TInterfacedObject, ITrabalhador,
ISerHumano);


Da maneira como está declarada a nossa classe acima, nós receberemos um código de erro do IDE, pois quando definimos que uma classe implementa uma interface, a classe deve contemplar todos os seus métodos implementando-os, se um ou mais de um não estiverem implementados receberemos um errro como esses abaixo:




[Pascal Error] Unit22.pas(33): E2003 Undeclared identifier: 'AndarEreto'

[Pascal Error] Unit22.pas(33): E2003 Undeclared identifier: 'Falar'


[Pascal Error] Unit22.pas(33): E2003 Undeclared identifier: 'Ouvir'


[Pascal Error] Unit22.pas(33): E2003 Undeclared identifier: 'Correr'


[Pascal Error] Unit22.pas(33): E2003 Undeclared identifier: 'Trabalhar'


[Pascal Error] Unit22.pas(33): E2003 Undeclared identifier: 'PagarImpostos'






Sua implementação é obrigatória nas classes que utilizam as interfaces, mas há uma maneira de postergar essa implementação na qual falarei mais abaixo. Você com certeza notou que nossa classe descende de TInterfacedObject, e o motivo é simples, essa classe já implementa de forma segura os métodos obrigatórios definidos em IInterface, ela descende de TObject e facilita o nosso trabalho para controlar o uso de interfaces. É  extremamente recomendado o seu uso!




Nossa classe utilizando interfaces!



Para termos a correta declaração para a classe acima devemos ter um código conforme este:



TBrasileiro = class(TInterfacedObject, ITrabalhador,
ISerHumano)
public
// métodos da interface ITrabalhador
function Trabalhar:Boolean;
function PagarImpostos:Boolean;
// métodos da interface ISerHumano
function AndarEreto:Boolean;
function Falar:Boolean;
procedure Ouvir;
procedure Correr;
end;





Dessa forma estamos dizendo que a classe TBrasileiro descende de TInterfacedObject e que implementa os métodos “definidos” pelas interfaces ITrabalhador e ISerHumano.




Postergando a implementação da interface:



Na realidade o que vamos fazer é instruir ao compilador para que ele procure pela implementação da interface numa classe que está representada por uma propriedade em nossa classe TBrasileiro, vamos então ver o código:




TBrasileiro = class(TInterfacedObject, ITrabalhador,
ISerHumano)
public
// métodos da interface ISerHumano
function AndarEreto:Boolean;
function Falar:Boolean;
procedure Ouvir;
procedure Correr;
// postergando a implementacao da interface ITrabalhador
function GetTrabalhador:ITrabalhador;
property Trabalhador:ITrabalhador
read GetTrabalhador Implements ITrabalhador;
end;


Agora podemos receber na nossa propriedade Trabalhador, qualquer classe que implemente a interface ITrabalhador. Dessa forma deixamos a implementação desses métodos para outra classe compatível, que poderá trabalhar sendo chamada sob demanda aliviando assim o peso de uma instanciação desnecessária.




Implementando a interface ITrabalhador:




TProgramador = class(TInterfacedObject, ITrabalhador)
public
// métodos da interface ITrabalhador
function Trabalhar:Boolean;
function PagarImpostos:Boolean;
// métodos dessa classe
procedure Dormir;
procedure Acordar;
procedure Comer;
procedure SurfarNaNet;
procedure Programar;
end;


No nosso método GetTrabalhador podemos ter a chamada para uma instância da classe TProgramador, pois existe a compatibilidade gerada pela interface.





function TBrasileiro.GetTrabalhador: ITrabalhador;
begin
Result := (TProgramador.Create) as ITrabalhador;
end;


Outra pecuriaridade importante!



Ao utilizarmos interfaces nas nossas aplicações, devemos reparar que as interfaces são sempre inicializadas com o valor Nil. E são liberadas quando estão fora do escopo ou recebem novamente um valor Nil. Já sei o que você está pensando, se elas iniciam com Nil, e fora do escopo ou quando recebem nil são liberadas então posso utilizar interfaces para referências de objetos diminuindo os meus memory leaks! Isso mesmo podemos utilizar as interfaces para trabalhar nossos objetos, tornando mais segura a nossa aplicação.  Mas … para tanto as interfaces que implementarmos devem descender obrigatoriamente em algum momento de TInterfacedObject,  eu falei que é recomendado o seu uso, lembra? A particularidade de TInterfacedObject ser autosuficiente deve-se ao fato de que em sua implementação do método _Release  e chamado o método Destroy quando o FRefCount chega a 0 (zero), você pode conferir no código na unit System.







Conclusão.



O uso de interfaces no projeto pode melhorar e muito a reusabilidade e flexibilidade de código no mesmo, seu uso nos obriga a ter uma estruturação mais refinada, forçando-nos a sermos mais organizados. Nos permite ainda aplicar o conceito de upCast ( Converter um objeto de um tipo mais especializado para um tipo mais genérico) e também simular a herança múltipla no Object Pascal, aumenta o desaclopamento de classes. Enfim você deve começar a utilizar esse conceito e assim daqui a pouco ele estará correndo nas suas veias e quando for escrever sua classe já irá querer extrair dela uma ou duas interfaces para que sejam amplamente utilizadas no seu projeto.

Rio de Janeiro é eleita a sede das Olimpíadas de 2016




"Rio de Janeiro acaba de ser escolhida a sede das Olimpiadas de 2016. O anúncio oficial foi feito agora há pouco, em Copenhague, onde se reuniu o Comitê Olímpico Internacional (COI) para a realização a eleição o que decidiria a cidade-sede dos Jogos. A capital carioca disputava na última fase votação com a espanhola Madri. O anúncio oficial foi feito às 13h30."
leia na integra em : Rio de Janeiro é eleita a sede das Olimpiadas de 2016

 
|  JoséHenriqueBR. Blogger Template By Lawnydesignz Powered by Blogger