Programacion

42
Tema 1 Juventud, ¿sabes que la tuya no es la primera generación que anhela una vida plena de belleza y libertad?Albert Einstein (1879-1955) físico alemán Estilo de programación De Wikipedia, la enciclopedia libre Saltar a navegación , búsqueda Estilo de programación (también llamado estándares de código o convención de código) es un término que describe convenciones para escribir código fuente en ciertos lenguajes de programación . El estilo de programación es frecuentemente dependiente del lenguaje de programación que se haya elegido para escribir. Por ejemplo el estilo del lenguaje de programación C variará con respecto al del lenguaje BASIC . Contenido [ocultar ] 1 Características del estilo 1.1 Nombres de variable apropiadas 1.2 Estilo de indentación 1.3 Valores booleanos en estructuras de decisión 1.4 Bucles y estructuras de control 1.5 Espaciado 2 Véase también 3 Enlaces externos

description

Concepto y como se programa básico.

Transcript of Programacion

Tema 1

Juventud, sabes que la tuya no es la primera generacin que anhela una vida plena de belleza y libertad?Albert Einstein (1879-1955) fsico alemnEstilo de programacin

De Wikipedia, la enciclopedia libre

Saltar a navegacin, bsquedaEstilo de programacin (tambin llamado estndares de cdigo o convencin de cdigo) es un trmino que describe convenciones para escribir cdigo fuente en ciertos lenguajes de programacin.

El estilo de programacin es frecuentemente dependiente del lenguaje de programacin que se haya elegido para escribir. Por ejemplo el estilo del lenguaje de programacin C variar con respecto al del lenguaje BASIC.

Contenido[ocultar]

1 Caractersticas del estilo

1.1 Nombres de variable apropiadas1.2 Estilo de indentacin1.3 Valores booleanos en estructuras de decisin1.4 Bucles y estructuras de control1.5 Espaciado2 Vase tambin3 Enlaces externos

3.1 Convenciones de cdigo en castellano3.2 Convenciones de cdigo en ingls3.3 Convenciones de cdigo de proyectos

Caractersticas del estilo [editar]El buen estilo, al tratarse de algo subjetivo, es difcil de categorizar concretamente; con todo, existen un nmero de caractersticas generales. Con el advenimiento de software que da formato al cdigo fuente de forma automtica, el foco en cmo ste debe de ser escrito debe evolucionar de forma ms amplia a la eleccin de nombres, lgica y otras tcnicas. Desde un punto de vista prctico, el uso de un computador para dar formato al cdigo fuente ahorra tiempo, y es posible forzar el uso de estndares a nivel de una compaa completa sin debates religiosos.

Nombres de variable apropiadas [editar]Una piedra clave para un buen estilo es la eleccin apropiada de nombres de variable. Variables pobremente nombradas dificultan la lectura del cdigo fuente y su comprensin.

Como ejemplo, considrese el siguiente extracto de pseudocdigo:

get a b c

if a < 24 and b < 60 and c < 60

return true

else return false

Debido a la eleccin de nombres de variable, es difcil darse cuenta de la funcin del cdigo. Comprese ahora con la siguiente versin:

get horas minutos segundos

if horas < 24 and minutos < 60 and segundos < 60

return true

else return false

La intencin el cdigo es ahora ms sencilla de discernir, "dado una hora en 24 horas, se devolver true si es vlida y false si no".

Estilo de indentacin [editar]Estilo de indentacin, en lenguajes de programacin que usan llaves para indentar o delimitar bloques lgicos de cdigo, como por ejemplo C, es tambin un punto clave el buen estilo. Usando un estilo lgico y consistente hace el cdigo de uno ms legible. Comprese:

if(horas < 24 && minutos < 60 && segundos < 60){

return true;

}else{

return false;

}

bien:

if(horas < 24 && minutos < 60 && segundos < 60)

{

return true;

}

else

{

return false;

}

con algo como:

if(horasset("notenabled" , $notenabled);

Creando bloques de cdigo

Otra recomendacin mia, es la de usar bloques de cdigo para identificar rpidamente el significado de unas lineas de proceso. En el siguiente ejemplo, se verifica si el usuario tiene los permisos para acceder a la pagina. Ntese como se han encerrado las lineas entre corchetes {} sin pertenecer estas, a un condicional.

{//Login Check if(!$login->logged() && !$login->isadmin()) { $site->template('login');

exit(0);

}}//End Login CheckRecomiendo hacer uso de esta tcnica siempre que se pueda, ayuda bastante a la hora de leer el cdigo. Y tu como mejoras tu cdigo?

Centanos que haces para poder leer mejor tus cdigos, y si tienes sugerencias o manas como nosotros xD.

Bibliografa

Indentacin automtica (autotabulacion de cdigo php): http://www.coders.me/php/codigo-mas-bonito http://formatter.gerbenvv.nl/version3/index.phphttp://en.wikipedia.org/wiki/Indent_stylehttp://es.wikipedia.org/wiki/Estilo_de_programacinTEMA 3Juventud, sabes que la tuya no es la primera generacin que anhela una vida plena de belleza y libertad?Albert Einstein (1879-1955) fsico alemnEntre las buenas prcticas de un programador, est el hacer uso de alguna convencin de nombramiento ya sea de proyectos, archivos de cdigo fuente e identificadores (campos, variables, mtodos, propiedades, clases, interfases, etc. (depediendo del Leguaje de Programacin))Cul es el objetivo de esta buena prctica? Implementar cdigo fuente que sea legible, claro, consistente, fcil de comprender y mantener.

A veces no ser posible seguir en aquella empresa donde desarrollamos alguna aplicacin y as que ser otra la persona que se ocupe de su mantenimiento. Nuestro cdigo debe tener la caracterstica de que "otros" tambin puedan entenderlo sin mximo esfuerzo, costo y tiempo.

Las cosas podran llegar a ser muy serias hasta el caso de que resultara mejor volver a desarrollar ese sistema desde cero!

Bueno, pero como mencion hace unas lneas arribas, una de las buenas prcticas es Convencin de Nombres.

Entre los estilos, estn los que siguen a continuacin:

Camel Case: forma de escribir una palabra donde su primera letra est en minsculas y la primera letra de las subsiguientes palabras en maysculas. Ejemplo: nombreCliente

Pascal Case: forma de escribir una palabra donde la primera letra est en mayscula y la primera de las subsiguientes palabras igualmente en mayscula. Ejemplo: NombreCliente

Estilo Maysculas: Todas las letras del identificador se encuentran en maysculas.

Estilo Minsculas: Todas las letras del identificador se encuentran en minsculas.

Por defecto, algunos lenguajes de programacin usan unos de estos estilos. Por ejemplo,

Los que conocen JAVA, para nombrar las constantes, todo mayscula. Para nombrar clases, usa PascalCase, para los mtodos, usa camelCase.

CONVENCIN DE NOMBRESLa convencin de nombres es un conjunto de normas y reglas para la escritura de nombres, cdigo fuente, identificadores y comentarios dentro de la programacin, que facilitan y hacen ms comprensible su lectura.

1. ClasesLas clases representan cosas y no acciones, por tal motivo evitar verbos como nombre de clase.

El nombre de la clase debe estar en singular, salvo que la clase represente multiplicidad de cosas.

Las Nombres de las clases deberan ser Sustantivos: ejemplo carro, hombre, tienda, pais, empleado, proveedor

Cada clase debe tener un bloque de documentacin segn la norma del lenguaje.

2. MtodosLos nombres de los mtodos deberan ser un verbo, dado que describe una accin ; ejemplo remover(), enviar(), cargar()

Los Mtodos dentro de las clases siempre debe declarar su visibilidad tales como privadas, protegidas, pblicas, etc

3. VariablesEvitar variables que sean de un solo carcter, Los nombres comunes para las variables temporales son i, j, k, m, y n para los nmeros enteros; c, d, y e para los caracteres.

Nombres de variables slo pueden contener caracteres alfanumricos

Nombres de variables deben ser camelCase

Continuando con las buenas prcticas de un programador :D les dejo lo siguiente:1. IndentacinSobre como indentar hay varios estilos tales como: Allman, K&R, BSD KN, Whitesmiths, etc.El estilo Allman es el mejor, el cual dice que debemos usar los sangrados para indentar el cdigo, nunca espacios. Poner las llaves de control en la lnea subsiguiente.

2. Saltos de LneaAadir un salto de lnea despus del cierres de los parntesis de los parmetros.Aadir un salto de lnea despus un punto y coma, cuando termina la sentencia.

3. Espacios y lneas en blancoUsar espacios en blanco para mejorar la legibilidad del cdigo.Usar espacios en blanco e ambos lados del operador de smbolos, despus de comas y despus de las declaraciones.Usar lneas en blanco para separar trozos de cdigo.Usar lneas en blanco antes de cada mtodo dentro de la clase.

4. Longitud de la lneaEvite las lneas de mas de 80 caracteres cuando supera se debe crtalo bajo los siguiente principiosSalto de lnea despus de la coma.Salto de lnea despus de un operador.Alinear la nueva lnea con el principio de la expresin en el mismo nivel en la lnea anterior.

Tema 4

Juventud, sabes que la tuya no es la primera generacin que anhela una vida plena de belleza y libertad?Albert Einstein (1879-1955) fsico alemnParadigmas de programacin y sus tipos

Un paradigma de programacin es un modelo bsico de diseo y desarrollo de programas, que permite producir programas con unas directrices especficas, tales como: estructura modular, fuerte cohesin, alta rentabilidad, etc.

Para algunos puede resultar sorprendente que existan varios paradigmas de programacin. La mayor parte de los programadores estn familiarizados con un nico paradigma, el de la programacin procedimental. Sin embargo hay multitud de ellos atendiendo a alguna particularidad metodolgica o funcional, como por ejemplo el basado en reglas de gran aplicacin en la ingeniera del conocimiento para el desarrollo de sistemas expertos, en que el ncleo del mismo son las reglas de produccin del tipo "if then"; el de programacin lgica, basado en asertos y reglas lgicas que define un entorno de programacin de tipo conversacional, deductivo, simblico y no determinista; el de programacin funcional, basado en funciones, forma funcionales para crear funciones y mecanismos para aplicar los argumentos, y que define un entorno de programacin interpretativo, funcional y aplicativo, el de programacin heurstica que aplica para la resolucin de los problemas "reglas de buena lgica" que presentan visos de ser correctas aunque no se garantiza su xito, modelizando el problema de una forma adecuada para aplicar estas heursticas atendiendo a su representacin, estrategias de bsqueda y mtodos de resolucin; el de programacin paralela; el basado en restricciones; el basado en el flujo de datos; el orientado al objeto, etc.

Un paradigma de programacin es una coleccin de modelos conceptuales que juntos modelan el proceso de diseo y determinan, al final, la estructura de un programa.

Esa estructura conceptual de modelos est pensada de forma que esos modelos determinan la forma correcta de los programas y controlan el modo en que pensamos y formulamos soluciones, y al llegar a la solucin, sta se debe de expresar mediante un lenguaje de programacin. Para que este proceso sea efectivo las caractersticas del lenguaje deben reflejar adecuadamente los modelos conceptuales de ese paradigma.

Cuando un lenguaje refleja bien un paradigma particular, se dice que soporta el paradigma, y en la prctica un lenguaje que soporta correctamente un paradigma, es difcil distinguirlo del propio paradigma, por lo que se identifica con l.

Tipos de paradigmas

Floyd describi tres categoras de paradigmas de programacin:

a) Los que soportan tcnicas de programacin de bajo nivel (ej.: copia de ficheros frente estructuras de datos compartidos)

b) Los que soportan mtodos de diseo de algoritmos (ej.: divide y vencers, programacin dinmica, etc.)

c) Los que soportan soluciones de programacin de alto nivel, como los descritos en el punto anterior

Floyd tambin seala lo diferentes que resultan los lenguajes de programacin que soportan cada una de estas categoras de paradigmas. Slo comentaremos los paradigmas relacionados con la programacin de alto nivel.

Se agrupan en tres categoras de acuerdo con la solucin que aportan para resolver el problema

a) Solucin procedimental u operacional. Describe etapa a etapa el modo de construir la solucin. Es decir seala la forma de obtener la solucin.

b) Solucin demostrativa. Es una variante de la procedimental. Especifica la solucin describiendo ejemplos y permitiendo que el sistema generalice la solucin de estos ejemplos para otros casos. Aunque es fundamentalmente procedimental, el hecho de producir resultados muy diferentes a sta, hace que sea tratada como una categora separada.

c) Solucin declarativa. Seala las caractersticas que debe tener la solucin, sin describir cmo procesarla. Es decir seala qu se desea obtener pero no cmo obtenerlo.

Paradigmas procedimentales u operacionalesLa caracterstica fundamental de estos paradigmas es la secuencia computacional realizada etapa a etapa para resolver el problema. Su mayor dificultad reside en determinar si el valor computado es una solucin correcta del problema, por lo que se han desarrollado multitud de tcnicas de depuracin y verificacin para probar la correccin de los problemas desarrollados basndose en este tipo de paradigmas.

Pueden ser de dos tipos bsicos: Los que actan modificando repetidamente la representacin de sus datos (efecto de lado); y los que actan creando nuevos datos continuamente (sin efecto de lado).

Los paradigmas con efecto de lado utilizan un modelo en el que las variables estn estrechamente relacionadas con direcciones de la memoria del ordenador. Cuando se ejecuta el programa, el contenido de estas direcciones se actualiza repetidamente, pues las variables reciben mltiples asignaciones, y al finalizar el trabajo, los valores finales de las variables representan el resultado.

Existen dos tipos de paradigmas con efectos de lado:

el imperativo

el orientado a objetos

Los paradigmas sin efecto de lado no incluyen a los que tradicionalmente son denominados paradigmas funcionales. Sin embargo es importante distinguir la solucin funcional procedimental de la solucin funcional declarativa.

Los paradigmas procedimentales definen la secuencia explcitamente, pero esta secuencia se puede procesar en serie o en paralelo. En este segundo caso el procesamiento paralelo puede ser asncrono (cooperacin de procesos paralelos) o sncrono (procesos simples aplicados simultneamente a muchos objetos).

Paradigmas declarativosEn este tipo, un programa se construye sealando hechos, reglas, restricciones, ecuaciones, transformaciones y otras propiedades derivadas del conjunto de valores que configuran la solucin.

A partir de esta informacin el sistema debe de proporcionar un esquema que incluya el orden de evaluacin que compute una solucin. Aqu no existe la descripcin de las diferentes etapas a seguir para alcanzar una solucin, como en el caso anterior.

Estos paradigmas permiten el uso de variables para almacenar valores intermedios, pero no para actualizar estados de informacin.

Dado que estos paradigmas especifican la solucin sin indicar cmo construirla, en principio eliminan la necesidad de probar que el valor calculado es el valor solucin. En la prctica, mientras que muchos de los paradigmas secuencia de control y efecto de lado que requiera la nocin de estado, las soluciones son todava producidas como construcciones ms bien que cmo especificaciones. Por lo que los paradigmas resultantes y los lenguajes que los soportan no son verdaderamente declarativos, sino pseudodeclarativos. En este grupo se encuentran: el funcional, el lgico y el de transformacin.

En principio, los paradigmas declarativos no son soluciones inherentes de tipos serie o paralelo, ya que no dirigen la secuencia de control y no pueden alterar el natural no paralelismo del algoritmo. No obstante, los paradigmas pseudodeclarativos requieren al menos un limitado grado de secuencia, y por lo tanto admiten versiones en serie y paralelo.

Paradigmas demostrativosCuando se programa bajo un paradigma demostrativo (tambin llamada programacin por ejemplos), el programador no especifica procedimentalmente cmo construir una solucin. En su lugar, presentan soluciones de problemas similares y permite al sistema que generalice una solucin procedimental a partir de estas demostraciones. Los esquemas individuales para generalizar tales soluciones van desde simular una secuencia procedimental o inferir intenciones.

Los sistemas que infieren, intentan generalizar usando razonamiento basado en el conocimiento. Una solucin basada en la inferencia intenta determinar en qu son similares un grupo de datos u objetos, y, a partir de ello, generalizar estas similaridades.

Otra solucin es la programacin asistida: el sistema observa acciones que el programador ejecuta, y si son similares o acciones pasadas, intentar inferir cul es la prxima accin que har el programador. Las dos principales objeciones al sistema de inferencia son:

Si no se comprueban exhaustivamente pueden producir programas errneos que trabajan correctamente con los ejemplos de prueba, pero que fallen posteriormente en otros casos

La capacidad de inferencia es tan limitada, que el usuario debe de guiar el proceso en la mayora de los casos.

Los resultados ms satisfactorios de los sistemas de inferencia son en reas limitadas, donde el sistema tena un conocimiento semntico importante de la aplicacin.

El mayor problema que se presenta con estos sistemas, es conocer cundo un programa es correcto. En el caso de los sistemas procedimentales, se consigue estudiando el algoritmo y el resultado de juegos de ensayo apropiados.

En el caso de los sistemas demostrativos el algoritmo se mantiene en una representacin interna, y su estudio se sale del mbito de estos sistemas. Por lo que la veracidad de la decisin se debe hacer exclusivamente sobre la base de la eficiencia del algoritmo sobre los casos especficos de prueba.

La programacin demostrativa es del tipo "bottom-up" y se adapta bien a nuestra capacidad de pensar. Sin embargo en la mayor parte de los paradigmas la resolucin del problema se efecta aplicando mtodos abstractos "top-down".

Tema 5

Juventud, sabes que la tuya no es la primera generacin que anhela una vida plena de belleza y libertad?Albert Einstein (1879-1955) fsico alemn Paradigma imperativo

Este paradigma se caracteriza por un modelo abstracto de ordenador que consiste en un gran almacenamiento de memoria.

El ordenador almacena una representacin codificada de un clculo y ejecuta una secuencia de comandos que modifican el contenido de ese almacenamiento. Este paradigma viene bien representado por la arquitectura Von Neuman (1903-1957), ya que utiliza este modelo de mquina para conceptualizar las soluciones: "Existe un programa en memoria que se va ejecutando secuencialmente, y que toma unos datos de la memoria, efecta unos clculos y actualiza la memoria".

La programacin en el paradigma imperativo consiste en determinar qu datos son requeridos para el clculo, asociar a esos datos unas direcciones de memoria, y efectuar paso a paso una secuencia de transformaciones en los datos almacenados, de forma que el estado final represente el resultado correcto.

En su forma pura este paradigma slo soporta sentencias simples que modifican la memoria y efectan bifurcaciones condicionales e incondicionales. Incluso cuando se aade una forma simple de abstraccin procedimental, el modelo permanece bsicamente sin cambiar. Los parmetros de los procedimientos son "alias" de las zonas de memoria, por lo que pueden alterar su valor, y no retorna ningn tipo de clculo. La memoria tambin se puede actualizar directamente mediante referencias globales.

El paradigma imperativo debe su nombre al papel dominante que desempean las sentencias imperativas. Su esencia es el clculo iterativo, paso a paso, de valores de nivel inferior y su asignacin a posiciones de memoria.

Si se analizan las caractersticas fundamentales de este tipo de paradigma se detectan las siguientes:

Concepto de celda de memoria ("variable") para almacenar valores. El componente principal de la arquitectura es la memoria, compuesto por un gran nmero de celdas donde se almacenan los datos. Las celdas tienen nombre (concepto de variable) que las referencian, y sobre los que se producen efectos de lado y definiciones de alias.

Operaciones de asignacin. Estrechamente ligado a la arquitectura de la memoria, se encuentra la idea de que cada valor calculado debe ser "almacenado", es decir asignado a una celda. Esta es la razn de la importancia de la sentencia de asignacin en el paradigma imperativo. Las nociones de celda de memoria y asignacin en bajo nivel, se tienden a todos los lenguajes de programacin y fuerzan en los programadores un estilo de pensamiento basado en la arquitectura Von Neumann.

Repeticin. Un programa imperativo, normalmente realiza su tarea ejecutando repetidamente una secuencia de pasos elementales, ya que en este modelo computacional la nica forma de ejecutar algo complejo es repitiendo una secuencia de instrucciones.

A este tipo de paradigma de programacin se le suele llamar algortmico, dado que el significado de algoritmo es anlogo al de receta, mtodo, tcnica, procedimiento o rutina, y se define como "un conjunto finito de reglas diseadas para crear una secuencia de operaciones para resolver un tipo especfico de problemas". De esta forma para N. Wirth, un programa viene definido por la ecuacin

Algoritmos + Estructura de Datos = ProgramasNo obstante, entendemos que aunque el concepto de algoritmo encaja en otros tipos de paradigmas, es privativo del tipo de programacin procedimental en el que su caracterstica fundamental es la secuencia computacional.

Atendiendo a los lenguajes imperativos, cabe clasificarlos en "orientados a expresiones" y "orientados a sentencias", segn jueguen las expresiones o sentencias un papel ms predominante en el lenguaje, respectivamente. Ambos son trminos relativos y no se pueden aplicar de forma absoluta. Se puede decir que C, FORTRAN; Algol, Pascal, son lenguajes orientados a expresiones, mientras que COBOL y PL/1 estn orientados a sentencias.

Las expresiones se han encontrado tiles principalmente porque son simples y jerrquicas y pueden combinarse uniformemente para construir expresiones ms complejas. S pues, las expresiones no sufren influencias de la arquitectura de Von Neumann.

Como ejemplos de programacin imperativa, se muestran en lenguaje Pascal la generacin de nmeros primos mediante la criba de Eratstenes, y en lenguaje C la ordenacin de datos mediante el mtodo de la burbuja.

Nmeros Primos

(* Genera nmeros primos en el rango 2..n, utilizando la criba de Eratstenes *)

Program primos(input, output);

Const n=50;Var i: 2..n;j: 2..25;iprimo: boolean;

Beginfor i:=2 to n doBegin (* Es primo i ? *)j:=2; iprimo:=true;While iprimo and (j