Documente Academic
Documente Profesional
Documente Cultură
de
Diseo
y
Programacin .Net
Lenguaje C#
1. INTRODUCCIN
El uso de estndares de programacin o codificacin estndar, es de gran
relevancia, al momento de entregar un producto de software, lo cual
repercute en la calidad de ste. El uso de un estndar de programacin
permite mejorar la prctica, elusin de problemas (ambigedad) en el
cdigo, logrando un conocimiento y un seguimiento ms fcil para el equipo
de desarrollo.
En este documento se da a conocer un estndar de codificacin orientado
principalmente al lenguaje de programacin C#.
Las tcnicas de codificacin aqu definidas no pretenden formar un conjunto
inflexible de los estndares de codificacin. Ms bien intentan servir de gua
en el desarrollo de un estndar de codificacin para un proyecto especfico
de software.
2. OBJETIVO
El principal objetivo de este documento es la de establecer estndares de
codificacin que permita el uso de buenas prcticas y recomendaciones de
diseo, para lograr mayores niveles de calidad en los productos de software
desarrollados.
La utilizacin de estndares debe mostrar efectos positivos sobre:
3. ALCANCE
Este documento tiene como alcance establecer una gua de desarrollo en el
lenguaje C# y .Net Framework Common Type System, con el fin de
uniformizar criterios para la generacin de cdigo.
Otras abreviaturas
Abreviatur
a
.ascx
.aspx
.cd
.config
.cs
.cshtml
.dll
.master
.mdf
.rdlc
.resx
.rpt
.settings
.sln
.suo
.vb
.vbhtml
.vbs
Descripcin
Control de Servidor ASP.Net
Archivo de cdigo .Net.
Archivo de Diagrama de Clase.
Archivo utilizado para configurar los
valores de la aplicacin.
Archivo de cdigo C#.
Archivo de cdigo C# en html.
Archivo de bibliotecas de enlace
dinmico de Windows
Pgina principal para aplicaciones
Web en WebForm.
Archivo de datos de SQL para datos
locales.
Archivo de Informe.
Archivo utilizado para editar y definir
recursos de aplicaciones.
Archivo de Crystal Report que publica
datos en un formulario de Windows.
Archivo de configuracin del usuario.
Solucin de Visual Studio.
Opciones de usuario de solucin de
Visual Studio.
Archivo de cdigo Visual Basic.
Archivo de Visual Basic en html.
Archivo de comandos que contiene
cdigo VBScript.
.wsf
.xsd
5. GLOSARIO DE TERMINOS
La siguiente tabla resume el uso de trminos usadas en este documento:
6. ESTANDARES DE PROGRAMACIN
6.1. GENERALIDADES SOBRE EL LENGUAJE C#
C# es un lenguaje orientado a objetos simple, elegante y con seguridad en
el tratamiento de tipos, que permite a los programadores de aplicaciones
empresariales crear una gran variedad de aplicaciones.
Lenguaje simple
C# es un lenguaje de programacin simple pero eficaz, diseado
para escribir aplicaciones empresariales.
Compatible
Para facilitar la migracin de programadores de C++ o Java a C#, no
slo se mantiene una sintaxis muy similar a la de los dos anteriores
lenguajes, sino que el CLR tambin ofrece la posibilidad de acceder a
cdigo nativo escrito como funciones sueltas no orientadas a objetos,
tales como las DLLs de la API de Win32.
Modernidad
C# un lenguaje de ltima generacin, implementa elementos que se
ha demostrado a lo largo del tiempo que son muy tiles para el
programador, como tipos decimales o booleanos, un tipo
bsico string as como una instruccin que permita recorrer
colecciones con facilidad. Estos elementos hay que simularlos en
otros lenguajes como C++ o Java.
Recoleccin de basura
El lenguaje incluido en la plataforma .NET tiene a su disposicin el
recolector de basura del CLR. Esto implica que no es necesario incluir
instrucciones de destruccin de objetos en el lenguaje.
Seguridad de tipos
C# incluye formas de control de acceso a tipos de datos, lo que
garantiza que no se produzcan errores difciles de detectar como un
acceso a memoria de ningn objeto. Para ello, el lenguaje provee de
una serie de normas de sintaxis, como no realizar conversiones entre
tipos que no sean compatibles, no se pueden usar variables no
inicializadas previamente, y en el acceso a tablas se hace una
comprobacin de rangos para que no se excedan ninguno de los
ndices de la misma.
Instrucciones seguras
Para evitar errores comunes como se producan en otros lenguajes,
se impusieron una serie de restricciones en el uso de instrucciones
de control ms comunes.
Unificacin de tipos
Eficiente
En C#, todo el cdigo incluye numerosas restricciones para
garantizar su seguridad, no permitiendo el uso de punteros. Existen
modificadores para saltarse esta restriccin, pudiendo manipular
objetos a travs de punteros. Para ello basta identificar regiones de
cdigo con el identificador unsafe, y podrn usarse en ellas punteros
de forma similar a como se hace en C++.
Ejemplos:
Microsoft.Office.PowerPoint
System.Collections
NOMBRE
DEL
RECURSO
DEFINICI
N
NOTACIN
Considerar
5
palabras
como
mximo para el nombre de las
bibliotecas dll.
Sintaxis:
<Compaia>.<Componente>.dll
Dnde:
EJEMPLO
Contoso.ControlesWeb.dll
NOMBRE
DEL
RECURSO
Clase (.cs)
DEFINICI
N
NOTACIN
Considerar
5
palabras
como
mximo para el nombre de las
bibliotecas dll.
Sintaxis:
[Wwww].[Xxxx][Yyyy].dll
Donde:
EJEMPLO
Contoso.ControlesWeb.dll
EJEMPL
OS
DE
USO
DEFINIC
IN
Identifica
dor
Casin
g
Ejemplo
Namespace
Type
Interface
Method
Pascal
Pascal
Pascal
Pascal
Property
Pascal
Event
Pascal
Enum value
Pascal
Parameter
Camel
NOTACI
N
EJEMPLOS
DE USO
<Company>.<Component>.dll
DEFINICI
N
NOTACIN
Sufijo
Atribute
EventHandler
Callback
Exception
Dictionary
Collection
Stream
Permission
EJEMPLOS
DE USO
class GestorContenido
enum ColorFondo
interface IAccesoDatos
DEFINICI
N
NOTACIN
aplican
en
la
Sufijo
Atribute
EventHandler
Callback
Exception
Dictionary
Collection
Stream
Permission
DEFINICI
N
NOTACIN
aplican
en
la
Emplear verbos.
EJEMPLOS
DE USO
DEFINICI
N
NOTACIN
EJEMPLOS
DE USO
DEFINICI
N
NOTACIN
Significado
public
Acceso no restringido.
protected
internal
protected interna
l
private
Miembros
de
Accesibilidad
predeterminada
Accesibilidades
declaradas
permitidas
enum
public
None
class
private
public
protected
internal
private
protected internal
interface
public
None
struct
private
public
internal
private
Contexto
Comentarios
Clases
Interfaces
Delegados
Constantes
Campos
Mtodos
Propiedades
Eventos
Indizadores
Operadores
Constructore
s
Modificador
Propsito
Modificadores de
acceso
public
private
internal
protected
abstract
async
const
Event
Declara un evento.
extern
new
Oculta
explcitamente
un
heredado de una clase base.
override
parcial
readonly
miembro
y mtodos
del
mismo
misma clase.
sealed
static
unsafe
virtual
volatile
Nombre
corto
Clase
.NET
Tipo
Anc
ho
Intervalo
(bits)
byte
Byte
0 a 255
sbyte
SByte
-128 a 127
int
Int32
32
2.147.483.64
8
a
2.147.483.64
7
uint
UInt32
32
0
a
4294967295
short
Int16
16
-32.768
32.767
ushort
UInt16
16
0 a 65535
long
Int64
64
9223372036
85477508 a
9223372036
85477507
ulong
UInt64
64
0
a
1844674407
3709551615
float
Single
Tipo de punto
flotante
de
precisin simple
32
3,402823e38
a
3,402823e38
double
Double
Tipo de punto
flotante
de
precisin doble
64
1,797693134
86232e308 a
1,797693134
86232e308
char
Char
Un
Unicode
carcter
16
Smbolos
Unicode
utilizados en
el texto
bool
Boolean
Tipo
lgico
Boolean
True o false
object
Object
Tipo
todos
tipos
base
de
los otros
string
String
Una secuencia de
caracteres
decimal
NOTACIO
N/
SINTAXIS
Decimal
Tipo
preciso
fraccionario
o
integral,
que
puede
representar
nmeros
decimales con 29
dgitos
significativos
128
1.0 10e
28
a
7.9 10e2
8
DONDE:
Los puntos entre [ y ] son opcionales. Los items en
negrita se deben reemplazar por palabras clave o por
nombres.
Sintaxis:
EJEMPLO
Matrices
Las matrices son muy tiles para crear y trabajar con un nmero
fijo de objetos fuertemente tipados.
NOTACIO
N/
SINTAXIS
DONDE:
Tipo [ ] nombreMatriz
int[ ] numerosImpares
{1,3,5,7,9};
new
int[
Colecciones
Las colecciones proporcionan un mtodo ms flexible para
trabajar con grupos de objetos. A diferencia de las matrices, el
grupo de objetos con el que trabaja puede aumentar y reducirse
dinmicamente a medida que cambian las necesidades de la
aplicacin. Para algunas colecciones, puede asignar una clave a
cualquier objeto que incluya en la coleccin para que pueda
recuperar rpidamente el objeto con la clave asignada.
Clases System.Collections.Generic
Puede crear una coleccin genrica utilizando una de las
clases
en
el
espacio
de
nombres
System.Collections.Generic. Una coleccin genrica es til
cuando todos los elementos de la coleccin tienen el mismo
tipo de datos. Una coleccin genrica cumple el tipado fuerte
al permitir agregar slo el tipo de datos deseado.
A continuacin se muestran algunas de las clases utilizadas
con
frecuencia
del
espacio
de
nombres
System.Collections.Generic:
Dictionary
CLASE
DEFINICIN
NOTACIN
Dictionary<TKey, TValue>
Dnde:
TKey: Tipo de las claves del diccionario.
TValue: Tipo
diccionario.
EJEMPLO
de
los
valores
del
List
CLASE
DEFINICIN
NOTACIN
List<T>
Dnde:
T: Tipo de elemento de lista.
EJEMPLO
Queue
CLASE
DEFINICIN
NOTACIN
Queue<T>
Dnde:
T: Especifica el tipo de elementos en la
cola.
EJEMPLO
SortedList
CLASE
DEFINICIN
NOTACIN
SortedList<TKey, TValue>
Dnde:
TKey: Tipo de las claves de la coleccin.
TValue: Tipo
coleccin.
EJEMPLO
de
los
valores
de
la
Stack
CLASE
DEFINICIN
NOTACIN
Stack<T>
Dnde:
T: Especifica el tipo de los elementos de
la pila.
EJEMPLO
Clases System.Collections.Concurrent
En .NET Framework 4, las colecciones en el espacio de
nombres de System.Collections.Concurrent proporcionan
operaciones eficaces y seguras para subprocesos con el fin
de obtener acceso a los elementos de coleccin desde varios
subprocesos.
Las
clases
del
espacio
de
nombres System.Collections.Concurrent deben utilizarse
en lugar de sus equivalentes en los espacios de nombres
System.Collections.Generic y System.Collections cuand
o varios subprocesos tienen acceso a la coleccin de manera
simultnea.
Algunas clases incluidas en el espacio
System.Collections.Concurrent son:
o
o
o
o
de
nombres
BlockingCollection
ConcurrentDictionary
ConcurrentQueue
ConcurrentStack
Clases System.Collections
Las clases del espacio de nombres System.Collections no
almacenan los elementos como objetos de un tipo especfico,
sino como objetos de tipo Object.
DEFINICIN
NOTACIN
ArrayList()
EJEMPLO
Hashtable
CLASE
DEFINICIN
NOTACIN
Hashtable()
EJEMPLO
openWith.Add("bmp", "paint.exe");
openWith.Add("dib", "paint.exe");
openWith.Add("rtf", "wordpad.exe");
Queue
CLASE
DEFINICIN
NOTACIN
Queue<T>
Dnde:
T: Especifica el tipo de elementos en la
cola.
EJEMPLO
Stack
CLASE
DEFINICIN
NOTACIN
Stack<T>
Dnde:
T: Especifica el tipo de los elementos de
la pila.
EJEMPLO
// Correcto
// Correcto
los
DEFINICIN DE COMENTARIOS
Los comentarios explican la razn de la existencia de cdigo de
programacin y son muy importantes para el mantenimiento y
documentacin.
La convencin de los comentarios es como siguen:
ETIQUETAS
RECOMENDADAS
DOCUMENTACIN
PARA
COMENTARIOS
DE
<c>
ETIQUETA
DEFINICIN
<c>text</c>
NOTACIN
Parmetros
text
Texto que se desea marcar como cdigo.
EJEMPLO
<code>
ETIQUETA
DEFINICIN
NOTACIN
Parmetros
content
Texto que se desea marcar como cdigo.
EJEMPLO
/// <summary>
/// The GetZero method.
/// </summary>
/// <example>
/// This sample shows how to call the <see
cref="GetZero"/> method.
/// <code>
/// class TestClass
/// {
///
static int Main()
///
{
///
return GetZero();
///
}
/// }
/// </code>
/// </example>
public static int GetZero()
{
return 0;
}
<example>
ETIQUETA
DEFINICIN
NOTACIN
Parmetros
description
Descripcin del ejemplo de cdigo.
EJEMPLO
/// <summary>
/// The GetZero method.
/// </summary>
/// <example>
/// This sample shows how to call the <see
cref="GetZero"/> method.
/// <code>
/// class TestClass
/// {
///
static int Main()
///
{
///
return GetZero();
///
}
/// }
/// </code>
/// </example>
public static int GetZero()
{
return 0;
}
<exception>
ETIQUETA
DEFINICIN
NOTACIN
<exception
cref="member">description</exception>
Parmetros
cref = "member"
Referencia a una excepcin disponible
desde el entorno de compilacin actual. El
compilador comprueba que la excepcin
proporcionada existe y traduce member al
nombre de elemento cannico en el
resultado
XML. member debe
aparecer
entre comillas dobles ("").
description
Descripcin de la excepcin.
EJEMPLO
}
}
}
<include>
ETIQUETA
DEFINICIN
NOTACIN
EJEMPLO
<list>
ETIQUETA
DEFINICIN
NOTACIN
EJEMPLO
/// </list>
/// </summary>
static void Main()
{
}
}
<para>
ETIQUETA
DEFINICIN
NOTACIN
EJEMPLO
Parmetros
content
Texto del prrafo.
<param>
ETIQUETA
DEFINICIN
<param name="name">description</param>
NOTACIN
EJEMPLO
Parmetros
name
Nombre de un parmetro de mtodo. Ponga
el nombre entre comillas dobles (" ").
description
Descripcin del parmetro.
<paramref>
ETIQUETA
DEFINICIN
EJEMPLO
Parmetros
name
Nombre del parmetro al que hay que
hacer referencia. Ponga el nombre entre
comillas dobles (" ").
<permission>
ETIQUETA
DEFINICIN
NOTACIN
cref = "member"
Referencia a un miembro o campo al cual
se puede llamar desde el entorno de
compilacin
actual. El
compilador
comprueba si el elemento de cdigo dado
existe y convierte member al nombre de
elemento
cannico
en
el
resultado
XML. member debe aparecer entre comillas
dobles (" ").
description
Descripcin del acceso al miembro.
EJEMPLO
class TestClass
{
/// <permission
cref="System.Security.PermissionSet">Everyone
can access this method.</permission>
public static void Test()
{
}
static void Main()
{
}
}
<remarks>
ETIQUETA
DEFINICIN
NOTACIN
Parmetros
Description
Descripcin del miembro.
EJEMPLO
/// <summary>
/// You may have some primary information about
this class.
/// </summary>
/// <remarks>
/// You may have some additional information
about this class.
/// </remarks>
public class TestClass
{
/// text for Main
static void Main()
{
}
}
<returns>
ETIQUETA
DEFINICIN
NOTACIN
EJEMPLO
Parmetros
description
Descripcin del valor devuelto.
/// text for class TestClass
public class TestClass
{
/// <returns>Returns zero.</returns>
public static int GetZero()
{
return 0;
}
<see>
ETIQUETA
DEFINICIN
NOTACIN
EJEMPLO
Parmetros
cref = "member"
Referencia a un miembro o campo al cual
se puede llamar desde el entorno de
compilacin actual. El compilador
comprueba si el elemento de cdigo dado
existe y pasa member al nombre de
elemento en el resultado
XML.Agregue member entre comillas dobles
(" ").
/// text for class TestClass
public class TestClass
{
/// <summary>DoWork is a method in the
TestClass class.
/// <para>Here's how you could make a second
paragraph in a description. <see
cref="System.Console.WriteLine(System.String)"/
> for information about output
statements.</para>
/// <seealso cref="TestClass.Main"/>
/// </summary>
<seealso>
ETIQUETA
DEFINICIN
NOTACIN
EJEMPLO
Parmetros
cref = "member"
Referencia a un miembro o campo al cual
se puede llamar desde el entorno de
compilacin actual. El compilador
comprueba si el elemento de cdigo dado
existe y pasa member al nombre de
elemento en el resultado
XML.member debe aparecer entre comillas
dobles (" ").
/// <summary>DoWork is a method in the
TestClass class.
/// <para>Here's how you could make a second
paragraph in a description. <see
cref="System.Console.WriteLine(System.String)"/
> for information about output
statements.</para>
/// <seealso cref="TestClass.Main"/>
/// </summary>
public static void DoWork(int Int1)
{
<summary>
ETIQUETA
DEFINICIN
NOTACIN
EJEMPLO
Parmetros
description
Resumen del objeto.
/// text for class TestClass
public class TestClass
{
/// <summary>DoWork is a method in the
TestClass class.
/// <para>Here's how you could make a second
paragraph in a description. <see
cref="System.Console.WriteLine(System.String)"/
> for information about output
statements.</para>
/// <seealso cref="TestClass.Main"/>
/// </summary>
public static void DoWork(int Int1)
{
}
/// text for Main
static void Main()
{
}
}
<value>
ETIQUETA
DEFINICIN
NOTACIN
EJEMPLO
Parmetros
property-description
Descripcin de la propiedad.
/// text for class Employee
public class Employee
{
private string _name;
/// <summary>The Name property represents
the employee's name.</summary>
/// <value>The Name property gets/sets the
value of the string field, _name.</value>
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
}
/// text for class MainClass
public class MainClass
{
/// text for Main
static void Main()
{
}
}
cargarMetodo(datos,listas, correo,
usuario, mensaje);
variable = cargarMetodo(datos,
actualizarMetodo(listas,
correo));
// RECOMENDADO
totalCalculo
=
primerCalculo
*
(segundoCalculo
tercerCalculo cuartoCalculo) + 4 * quintoCalculo;
// EVITAR
totalCalculo
=
primerCalculo
*
(segundoCalculo
tercerCalculo
- cuartoCalculo) + 4 * quintoCalculo;
//IDENTACIN CONVENCIONAL
actualizarAtencion(int cantidad,
Object atenciones,
String personas,
Object promedio){
..........
}