Archive for June, 2007

NHibernate inicio 0

Estou no momento trabalhando com .NET e estudando o modelamento de aplicações em camadas. Por isso comecei a estudar um pouco sobre o NHibernate, um sucesso já vindo do Hibernate para Java.

Infelizmente nem tudo ocorreu tão fácil para um primeiro teste para a partir de algo em funcionamento começar a mexer nele.

As primeira coisa que é bom fazer é colocar o schema do mapping e configuration do NHibernate.

Para o Visual Studio 2005 a pasta se encontra em:

%ProgramFiles%\Microsoft Visual Studio 8\Xml\Schemas

Basta colocar os arquivos nhibernate-configuration.xsd e nhibernate-mapping.xsd neste diretório.

Um dos problemas que eu tinha era com relação a configuração do connection_string.

Usei uma vez Data Source para determinar o local onde o banco de dados se encontra, e isso causava erro na aplicação. Para corrigir bastou mudar para Server que a aplicação rolou.

Interfaces em C# 0

Interfaces são classes assinaturas que determinam uma série de métodos que podem ser feitos com um quem a implementá-la. Como havia mencionado, interface são usadas para determinar tipos de dados. Uma classe pode implementar quantas interfaces desejar. Mas existem algumas considerações que devem ser consideradas.

interface IClass {
return-type methodA();
return-type methodB(int x);
}

Algumas pessoas usam o I no início para determinar que é uma interface. Você pode determinar métodos genéricos como methodA ou pode determinar métodos com uma certa assinatura obrigatória como methodB que necessita de um inteiro como parâmetro.

Em geral, todo método é declarado públic numa interface, mas é possível criá-lo privado.

class Class : IClass {
methodA() {
// sub-rotina
}

IClass.methodB(int x) {
// bla bla bla...
}

methodC(int x) {
IClass ic = this;
ic.methodB(x);
}
}

Class c = new Class();
c.methodA(); // call método A
c.methodB(x); // error
c.methodC(x); // call método C >> call método B

Como remover o conflito de duas interfaces que assinam o mesmo método?

Usando a implementação privada é possível resolver este problema, cria-se cada método privadamente, e cria funções diferentes para acesso de cada um deles.

Pilares do Paradigma Orientado a Objetos (Parte 1) 0

O paradigma orientado a objetos é algo que não há como evitar caso deseje ser um desenvolvedor. Toda aplicação exige uma organização e metodologia para desenvolvimento, não basta abrir o editor de texto e digitar.

Alguns princípios da orientação a objetos estão listadas abaixo:

Encapsulamento (encapsulation)

Toda aplicação é composta de pequenos elementos que unidos concluem o produto final. É comum a ocorrência de métodos (“funções”) que dependem de outros para concluir sua operação. Um método que delega um objeto a fazer uma determinada parte de sua operação não precisa saber como ele faz, para ele é suficiente saber que dada uma entrada ele manipula ela e retorna o que deseja. Essa metodologia de tratamento da entrada não transparente é o que se chama de encapsulamento.

Esse encapsulamento pode ocorrer de duas formas: por delegação ou métodos privados.

  • delegação é quando usamos um objeto instânciado de outra classe que contém métodos que auxiliam a função de um método;
  • métodos privados são métodos internos da classe, ou seja, não são vistos externamente, servem apenas para concluir pequenas operações.

Na orientação a objetos é comum subdividir tarefas criando pequenos blocos com uma única finalidade e não classes lotadas de linhas de códigos.

Em resumo, todo método de uma classe é encapsulada, apresentando ao exterior apenas as suas operações (nomes dos métodos), para o usuário não importa como ela faz.

Especialização (specialization)

A especialização esta relacionada a herança. Em geral, muitas coisas compartilham propriedades bases. Uma moto, carro e bicicleta são meios de transporte. Embora cada um possua suas particularidades que os diferenciam. Poderiamos partir de uma base admitindo que todos sejam veiculos, e poderíamos especificar/especializar essa classe consideram veiculos motorizados ou não. Tudo dependeria da forma que tratamos nosso projeto. Poderíamos subdividir em classes de objetos de 2 rodas ou 4 rodas.

Uma caracteristica importante é que uma classe pode apenas especializar uma outra classe, ou seja, deve-se projetar bem.

Quando desejamos caracterizar mais uma classe podemos implementar uma interface. Em geral, uma interface representa um tipo de dado. Uma propriedade que se mantem a todos que a implementarem, não importando como cada um faz.