El código de un programa lo leen muchas personas,
bien para repararlo, bien para ampliarlo o, simplemente, para evaluarlo. Para
estos lectores es fundamental que el programa esté bien redactado, con estilo,
para que su significado sea claro y diáfano.
Al igual que cuando
aprendemos redacción literaria, una forma excelente de adquirir un buen estilo es leer textos ajenos. Es por ello que recomendamos al alumno la lectura, y aún
estudio, de programas existentes. Un programa puede escribirse con mejor o peor
estilo. En estas notas intentaremos concretar qué se entiende por un programa
bien escrito.
Que un programa
funcione o no es en buena medida independiente de que esté bien o mal escrito.
No obstante:
1. un programa mal
escrito tiene una probabilidad mayor de no funcionar correctamente
un buen estilo facilita la corrección.
2. es imposible depurar
un programa mal escrito.
3. es imposible mantener
un programa mal escrito.
Ordenación
y estilo.
Se seguirá una convención coherente sobre:
- Capitalización de palabras clave
- Capitalización de variables locales, variables globales y constantes.
- Nivel de sangrado (número de espacios usados por cada nivel).
- Ordenación de las declaraciones de tipos compuestos (registros, objetos, etc.
- Ordenación de las sentencias case.
Bajo ningún concepto se seguirá un estilo de codificación
que induzca a interpretaciones.
ALINEACIÓN
Y SANGRADO.
- · Los sangrados se realizarán siempre con tabuladores y nunca con espacios
- .Se sangrará un único tabulador por nivel.
- Los diferentes editores permiten configurar posteriormente el tamaño en caracteres de ese tabulador.
· Se deberá usar uno de los dos estilos
siguientes de sangrado:
d
Se recomienda el sangrado por bloques puros. En Java, este sangrado es obligatorio dado que coincide con la recomendación oficial de Sun (Sun Microsystems 1999).
Se tolera el uso de cláusulas Then continuadas en la misma línea cuando no excedan la anchura de la página:
En las declaraciones de tipos compuestos, se recomienda sangrar respecto al inicio de la línea y no respecto a la palabra clave o el nombre de tipo. Es decir, usar:
En lugar de:
O de :
En las sentencias switch, se recomienda sangrar respecto a la palabra que selecciona la acción en lugar de respecto al inicio de la acción. Es decir, usar:
En lugar de:
Sentencias continuadas a más de una linea
Cuando una sentencia tenga que partirse en más de una linea, el punto de partición se elegirá de forma que quede claro que la primera linea tiene continuidad en la siguiente. Por ejemplo:
En lugar de:
Agrupamiento
Los trozos de código dentro de una rutina o bloque deberán
separarse con líneas en blanco cuando el objetivo o intención de cada uno de
ellos sea diferente.
En las sentencias If, While, Until, cuando las expresiones condicionales sean muy largas, se agruparán de forma que cada sub-condición esté en una línea aparte, sangrada al nivel del inicio de la primera condición:
En
las declaraciones de variables, no se harán agrupaciones por tipos. Es decir,
cada variable deberá estar con su tipo. Por ejemplo, el siguiente código no es
admisible:
Debiendo sustituirse por:
Comentarios
Los comentarios deberán tener
el mismo nivel de sangrado que el código que comentan.
La métrica CP (Comment
Percentage) se define como el número de líneas de comentario
dividida por el número de líneas no blancas de código. Un nivel apropiado para esta métrica está en torno al 20% (Rosenberg y Hyatt 1995).
dividida por el número de líneas no blancas de código. Un nivel apropiado para esta métrica está en torno al 20% (Rosenberg y Hyatt 1995).
Los comentarios deben escribirse de forma que
sean fáciles de modificar. Por ejemplo, los siguientes comentarios son
difíciles de cambiar:
El motivo es que el más
mínimo cambio requerirá un tedioso trabajo de volver a recuadrar con asteriscos el resultado.
Otro ejemplo de comentario difícil de mantener es: Los
comentarios deben escribirse de forma que sean fáciles de modificar. Por
ejemplo, los siguientes comentarios son difíciles de cambiar:
1.2 Evaluación de expresiones
Una
expresión es una combinación de operadores y operandos de cuya evaluación se
obtiene un valor. Los operandos pueden ser nombres que denoten objetos
variables o constantes, funciones, literales de cualquier tipo adecuado de
acuerdo con los operadores u otras expresiones más simples. La evaluación de
una expresión da lugar a un valor de algún tipo, una expresión se dice que es
del tipo de su resultado. Para evaluar una expresión es necesario conocer la
prioridad de los operadores, con lo cual se puede determinar cuál operación se
va a realizar antes que las demás.
Las expresiones se evalúan de
acuerdo con la precedencia de los operadores. Ante una secuencia de operadores
de igual precedencia, la evaluación se realiza según el orden de escritura, de
izquierda a derecha. El orden de evaluación puede modificarse usando
paréntesis.
Tipos de expresiones:
Dentro de las expresiones
distinguimos dos clases según el tipo de datos que devuelven al evaluarlas
- · Aritméticas: las que devuelven un valor numérico
- · Lógicas: las que devuelven true o false
Evaluación de expresiones
Toda expresión regresa un
valor. Si hay más de un operador, se evalúan primero operadores mayor
precedencia, en caso de empate, se aplica regla asociatividad.
Para evaluar una expresión no
hay que hacer nada del otro mundo, pues es bien sencillo. Sólo hay que saber
sumar, restar, si un número es mayor que otro. Hay tres reglas de prioridad a
seguir para evaluar una expresión:
· Primero,
los paréntesis (si tiene)
· Después,
seguir el orden de prioridad de operadores
· Por
último, si aparecen dos o más operadores iguales, se evalúan de izquierda a
derecha.
Las expresiones son secuencias
de constantes y/o variables separadas por operadores válidos. Se puede construir una
expresión válida por medio de :
1. Una sola constante o
variable, la cual puede estar precedida por un signo + ó – .
2. Una secuencia de términos
(constantes, variables, funciones) separados por operadores.
Además debe considerarse que:
Toda variable utilizada en una
expresión debe tener un valor almacenado para que la expresión, al ser
evaluada, dé como resultado un valor.
Jerarquía de operadores
El orden general de evaluación
de los operadores de una expresión va de izquierda a derecha, con la excepción
de las asignaciones que lo hacen de derecha a izquierda.
Podemos seguir las siguientes
tres reglas de evaluación de expresiones:
(Regla 1) En todas las
expresiones se evalúan primero las expresiones de los paréntesis más anidados
(interiores unos a otros); y éstos modifican la prioridad según la cantidad de
éstos, los cuales tienen que estar balanceados (el mismo número de paréntesis
que abren debe ser igual al número de los paréntesis que cierran).
(Regla 2) Todas las
expresiones se evalúan tomando en cuenta la jerarquía de los operadores.
(Regla 3) Todas las expresiones
se evalúan de izquierda a derecha.
Como contenido auxiliar les dejamos este vídeo sobre el mismo tema.
1.3 Definición de funciones
La mejor manera de desarrollar
y mantener un programa grande es construirlo a partir de piezas pequeñas o
módulos, los cuales son más manejables que el programa original.
El programador puede escribir
funciones para definir tareas específicas que se podrían utilizar en muchos
puntos del programa. A éstas se les llama funciones definidas por el
programador. Las instrucciones reales que definen a las funciones se escriben
solamente una vez, y están ocultas a las demás funciones.
Ejemplos de funciones en C.
A continuación los enteros se
pasan a máximo (línea 19), la cual determina el entero más grande.
1.4 Disciplina de tipos
“Los
tipos se infieren, es decir se comprueban, de forma estática, en tiempo de
compilación.”
En
los lenguajes de programación con disciplina de tipos, cada tipo
representa una colección de valores o datos similares. El conocer los tipos de
las funciones ayuda a documentar los programas y evitar errores en tiempo
de ejecución.
Un
lenguaje tiene disciplina de tipos si los errores de tipos se detectan siempre ⇒ es necesario determinar los tipos de todos los operandos,
ya sea en tiempo de compilación o de ejecución
Pascal
- · Cercano a tener disciplina de tipos pero no realiza comprobación de tipos en los registros variantes (incluso puede omitirse la etiqueta discriminatoria en dichos registros)
Ada
- · Resuelve el problema de los registros variantes realizando comprobación dinámica de tipos (sólo en este caso).
- · Tiene una función de biblioteca que permite extraer un valor de una variable de cualquier tipo (como una cadena de bits) y usarlo como un tipo diferente (no es una conversión de tipos) ⇒ se trata de una suspensión temporal de la comprobación de tipos
C
- No tiene disciplina de tipos por:
- No se realiza comprobación de tipos sobre las uniones.
- Permite funciones con parámetros sobre los que no se realiza comprobación de tipos
Java
- · Tiene disciplina de tipos (no hay uniones)
ML y
Haskell
· Poseen disciplina de
tipos, Los tipos de los
parámetros de las funciones (y de estas mismas) se conocen en tiempo de
compilación (ya sea por declaración del usuario o por inferencia de tipos).
Haskell
y otros lenguajes funcionales utilizan el sistema de tipos de Milner, que tiene
dos características fundamentales:
Disciplina
estática de tipos: Los programas bien tipados se pueden conocer en tiempo de
compilación. Un programa bien tipado se puede utilizar sin efectuar
comprobaciones de tipo en tiempo de ejecución, estando garantizado que no se
producirán errores de tipo durante el computo.
Polimorfismo:
Permite que una misma función se pueda aplicar a parámetros de diferentes
tipos, dependiendo del contexto en el que la función se utilice.
1.5
Tipos de datos
Tipos de Datos En lenguajes de
programación un tipo de dato es un atributo de una parte de los datos que
indica al ordenador (y/o al programador) algo sobre la clase de datos sobre los
que se va a procesar.
Los Tipos de Datos En un
sentido amplio, un tipo de datos define un conjunto de valores y las
operaciones sobre estos valores. Casi todos los lenguajes de
programación explícitamente incluyen la notación del tipo de
datos, aunque lenguajes diferentes pueden usar terminología diferente. La mayor
parte de los lenguajes de programación permiten al programador definir tipos de
datos adicionales, normalmente combinando múltiples elementos de otros tipos y
definiendo las operaciones del nuevo tipo de dato. Por ejemplo, un programador
puede crear un nuevo tipo de dato llamado "Persona" que especifica
que el dato interpretado como Persona incluirá un nombre y una fecha de
nacimiento.
Tipos De Datos
Todos los datos tienen un tipo
asociado con ellos. Un dato puede ser un simple carácter, tal como `b’, un
valor entero tal como 35. El tipo de dato determina la naturaleza del conjunto
de valores que puede tomar una variable.
- · Numéricos
- · Simples Lógicos
- · Alfanuméricos (string)
Tipos de Datos Simples:
- · Datos Numéricos: Permiten representar valores escalares de forma numérica, esto incluye a los números enteros y los reales. Este tipo de datos permiten realizar operaciones aritméticas comunes.
- · Datos Lógicos: Son aquellos que solo pueden tener dos valores (cierto o falso) ya que representan el resultado de una comparación entre otros datos (numéricos o alfanuméricos).
- · Datos Alfanuméricos (String): Es una secuencia de caracteres alfanuméricos que permiten representar valores identificables de forma descriptiva, esto incluye nombres de personas, direcciones, etc. Es posible representar números como alfanuméricos, pero estos pierden su propiedad matemática, es decir no es posible hacer operaciones con ellos. Este tipo de datos se representan encerrados entre comillas.
A continuación una pequeña lista con diferentes tipos de valores y unas características:
REFERENCIAS
José A. Mañas. (8 de mayo, 2003). Estilo de Programación. 2003, de Universidad Politécnica de Madrid Sitio web: http://www.lab.dit.upm.es/~lprg/material/apuntes/doc/estilo.htm
Tania Marlene Coronado LopezMenú Saltar al contenido. (12 de febrero del 2014). ESTILOS DE PROGRAMACIÓN. 2014, de WordPress.com. Sitio web: https://programacionlogicayfuncional.wordpress.com/2014/02/12/estilos-de-programacion/
Sonia Joaquín Trejo Paola Marquez Alfredo. (Friday, March 4, 2016). PROGRAMACIÓN LÓGICA Y FUNCIONAL. 2014, de http://programacionlogyfun.blogspot.mx Sitio web: http://programacionlogyfun.blogspot.mx/2016/03/programacion-logica-y-funcional-la.html
Tania Marlene Coronado LopezMenú Saltar al contenido.. (12 de febrero del 2014). EVALUACION DE EXPRESIONES EN DIFERENTES LENGUAJES. 2014, de https://programacionlogicayfuncional.wordpress.com Sitio web: https://programacionlogicayfuncional.wordpress.com/2014/02/12/evaluacion-de-expresiones/
Paul Deitel, Harvey Deitel. (2004). Como Programar en C, C++ y Java . United States: Prentice Hall.
Diana Avila. (2017). 176565687-Disciplina-de-Tipos. 2017, de Instituto tecnologico de Huehuetan Sitio web: https://www.academia.edu/8497501/176565687-Disciplina-de-Tipos
Karla Ortega . (12 de febrero de 2014). UNIDAD 1: CONCEPTOS FUNDAMENTALES. 2014, de .blogspot.mx Sitio web: http://karlaprogramacionfuncional.blogspot.mx/2014/02/unidad-1-conceptos-fundamentales.html
Alejandra IR, Horeb RL.. (2 de marzo de 2016). 1.5 Tipos de Datos. 2016, de blogspot.mx Sitio web: http://prolog-fun.blogspot.mx/2016/03/15-tipos-de-datos.html








No hay comentarios:
Publicar un comentario