Estilo de programação

Postado por Carlos Fernando Sylverio | Postado em Orientação a Objetos, Programação | Postado em 24-06-2009

1

Não é nada de outro mundo, mas totalmente fundamental para o desenvolvimento de software em equipe. Estilo são definições de como escrever o código fonte, em outras palavras, padrões de nomenclatura para nomes e declarações de variáveis, atributos, métodos, classes, etc.

Para isso podemos seguir algumas convenções (como em Java e C#.Net), ou criar um definições de estilo com apropria equipe em questão.

Vantagens ao usar estilo

Quando se esta desenvolvendo em equipe, o código deve ser compreendido por todos os membros. O estilo de programação tem como função auxiliar a equipe escrever código de modo único, assim é de fácil compreenção os códigos criados por outros menbros.

Complementação do estilo

Mais meu habito que propriamente do estilo, é ter um cuidado especial ao se definir nomes de objetos, métodos, atributos, variáveis, entre outros. A correta nomeação dos elementos no código ajuda a diminuir o hiato entre o código e mundo real, e assim como estilo de programação, também tornar mais fácil sua compreensão.

Exemplos do dia a dia

Recentemente estive envolvido em um projeto de uma aplicação antiga. Não havia na empresa mais nenhum desenvolvedor que criou a aplicação e precisávamos implementar algumas melhorias. Ao começar a implementar as melhorias, me deparei com algumas variáveis chamada X, Y, item. E perdi horas tentando compreender o que significa X, Y e item.

Conclusão

Para exemplificar esses conceitos, criei 2 aplicações iguais, ambas em Java, porem o primeiro está totalmento sem estilo e o segundo com um estilo que normalmente sigo. Compare e tire suas próprias conclusões:

Aplicação sem estilo

public class XyZ {
	public String no;
	public int id;
}
import java.util.ArrayList;
 
public class XyZs extends ArrayList{
	private static final long serialVersionUID = 1L;
}
import java.util.Iterator;
 
public class Application {
 
	public static void main(String[] args) {
 
		XyZs xxs = new XyZs();
 
		xxs.add(Cria("Sergio", 20));
		xxs.add(Cria("Rafael", 24));
		xxs.add(Cria("Frank", 22));
 
		ImprimeLista(xxs);
	}
 
	public static XyZ Cria(String n, int i) {
 
		XyZ x = new XyZ();
		x.no = n;
		x.id = i;
 
		return x;
	}
 
	public static void ImprimeLista(XyZs g){
		System.out.print("==== Lista de Amigos ==== \n");
 
		for (Iterator i = g.iterator(); i.hasNext();) {
			XyZ a = (XyZ) i.next();
			System.out.print("Nome: " + a.no + " idade: " + a.id + "\n");
		}
	}
 
}

Aplicação com estilo

public class Amigo {
	public String nome;
	public int idade;
}
import java.util.ArrayList;
 
public class Amigos extends ArrayList{
	private static final long serialVersionUID = 1L;
}
import java.util.Iterator;
 
public class Application {
 
	public static void main(String[] args) {
 
		// cria lista de amigos
		Amigos amigos = new Amigos();
 
		// adiciona amigo a lista
		amigos.add(CriaAmigo("Sergio", 20));
		amigos.add(CriaAmigo("Rafael", 24));
		amigos.add(CriaAmigo("Frank", 22));
 
		ImprimeLista(amigos);
	}
 
	public static Amigo CriaAmigo(String nome, int idade) {
 
		Amigo ret = new Amigo();
		ret.nome = nome;
		ret.idade = idade;
 
		return ret;
	}
 
	public static void ImprimeLista(Amigos amigos){
		System.out.print("==== Lista de Amigos ==== \n");
 
		for (Iterator i = amigos.iterator(); i.hasNext();) {
			Amigo amigo = (Amigo) i.next();
			System.out.print("Nome: " + amigo.nome + " idade: " + amigo.idade + "\n");
		}
	}
 
}

Perceptível a diferença, não?

Links Complementares:

Não encontri nenhum artigo de estilo de Java, assim que eu encontrar eu posto aqui. Enquanto isso podemos ver a API do Java e tirar nossas conclusões de como escrever em Java com um estilo bem parecido.

Até mais… ;-)

Modelo de Domínio

Postado por Carlos Fernando Sylverio | Postado em Análise | Postado em 23-06-2009

0

O modelo de domínio é um dos passos mais importantes na análise OO, por decompor um domínio em conceitos.
Podemos definir o modelo de domínio em uma ilustração de classes conceituais (ou objetos de domínio).
Em outras palavras, ele é uma perspectiva conceitual de objetos em uma situação real do mundo. Ele nos auxilia na compreenção dos termos e conceitos, bem como seus relacionamentos.
O escopo do modelo de domínio é limitado pelos cenários descritos no caso de uso.

Um modelo de domínio não mostra artefatos ou classes de software. Note que modelo de domínio é diferente de camada de domínio, esta segunda representa uma camada de software com regras de negócio abaixo da camada de UI (UserInterface ou Apresentação).
O modelo de domínio não é um modelo de dados. Pode existir classes no modelo que não tenham atributos.

O que é Classe Conceitual
De modo informal, é uma idéia, coisa ou objeto. Mas formalmente uma classe conceitual pode ser considerada em termos do seu símbolo, da sua intensão e da sua extensão.

  • Símbolo – palavra ou imagem que representa uma classe conceitual.
  • Intensão – a definição de uma classe conceitual.
  • Extensão - conjunto de exemplos aos quais a classe conceitual se aplica.

Exemplo:
Em um evento de transação de Emitir Nota Fiscal, podemos denomina-la como símbolo “Emitir NF”. A intensão de Emitir NF é “registrar de uma transferência de propriedade sobre um bem ou uma atividade comercial”. E a sua extensão são todas as “Notas Fiscais Emitidas” existentes no universo.

Referências

LARMAN, Craig. Utilizando UML e padrões: uma introdução à análise e ao projeto orientados a objetos e ao Processo Unificado. Bookman, 2007.