Personal tools
gvSIG Desktop
gvSIG Desktop
 
Document Actions

Nomenclatura para clases e interfaces

by Joaquin Jose del Cerro Murciano last modified 2010-08-27 13:59

Criterios a seguir en el uso de prefijos y sufijos en los nombres de clases e interfaces

Introducción

Este documento define algunas reglas para el nombrado de clases e interfaces con el objetivo de seguir un estilo común en los componentes de gvSIG.

La importancia de mantener cierta homogeneidad en el nombrado queda de manifiesto si se piensa en un Javadoc completo de la aplicación. Desde el punto de vista de un lector, la diversidad de criterios en los nombres crearía confusión y complicaría su comprensión.

Criterio a seguir

Uso de prefijos y sufijos en general

El uso de prefijos y/o sufijos en el nombre de clases e interfaces es normalmente una forma de aportar información sobre su naturaleza y/o cometido. Por ejemplo se pueden utilizar para denotar un patrón o un rol dentro de un patrón (por ejemplo el sufijo Factory). En otras ocasiones, se hace necesario su uso porque el nombre adecuado ya está asignado. Este es el caso de los prefijos y sufijos que se caracterizan a continuación.

Como regla general:

  • Sólo se utilizará un prefijo o sufijo cuando no se pueda utilizar el nombre simple (normalmente porque ya esté siendo usado por otra clase o interfaz).

Uso del prefijo "Abstract"

  • Sólo debe usarse en clases, no en interfaces.
  • La clase debe ser abstracta e implementar un interface.
  • Sólo se utilizara cuando la interfaz que implementa tenga el mismo nombre.

Ejemplo:

public interface List {}
public abstract class AbstractList extends AbstractCollection implements List {}

Uso del prefijo "I"

  • Se recomienda no utilizar.

    Normalmente, las interfaces son la parte visible del modelo de un componente. Suelen representar a las entidades y conceptos propios del negocio o dominio y por tanto se recomienda mantener los nombres tal cual se utilizan en el negocio.

Uso del prefijo "Default"

  • No puede ser una clase abstracta.
  • Es una implementación por defecto de una interfaz o una clase abstracta.
  • La implementación que aporta debe ser suficiente, pero no necesariamente completa.
  • Pueden existir implementaciones alternativas a esta clase.

Ejemplo:

public interface ListModel {}
public abstract class AbstractListModel implements ListModel, Serializable {}
public class DefaultListModel extends AbstractListModel {}

Uso del prefijo "Base"

  • No es una clase abstracta.
  • Proporciona una implementación "base" de un interface o una clase abstracta.
  • La clase puede ser instanciada para ser usada sin más, pero está pensada para que el usuario del componente la extienda.
  • Si no tiene un interface o clase abstracta como padre, no debe usarse este prefijo.

Ejemplo:

public abstract class StreamRequestHandler {}
public class BaseHTTPRequestHandler extends StreamRequestHandler {}

Uso del sufijo "Impl"

  • Es una clase instanciable, y por tanto no puede ser abstracta
  • Es una implementación completa de un interface o clase abstracta, que generalmente se llama igual que la clase sin el "impl".
  • No se debe extender otras clases a partir de ella.
  • Si el nombre de la clase no entra en conflicto con el nombre del interface o clase abstracta a implementar, no se usará este sufijo.
  • Si se trata de la implementación por defecto de una parte del API y no entra en conflicto con otras partes del proyecto se prefiere el uso del prefijo Default.

Ejemplo:

public interface Plane {}
public abstract class AbstractPlane implements Plane {}
 
// Ambos son correctos (pero no iguales)
public class PlaneImpl implements Plane {} 
public class PlaneImpl extends AbstractPlane {}

Condiciones de aplicación

Este criterio se aplicará en los desarrollos nuevos que se realicen para gvSIG 2.0 y vayan o formar parte de la distribución oficial de gvSIG así como por todos los desarrollos financiados total o parcialmente por la CIT.

View source document Get permanent link


Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: