Usuario:ManuelRomero/CursoJavaUml/programacionAlgoritmica
Contenido
Conceptos básicos en la programación
|
Algunas conceptos previas
- Tipo de dato conjunto de valores para los cuales hay definidos una serie de operaciones
- Variable posición de menoria o registro identificado con un nombre (identificador)cuyo contenido va a almacenar un valor de un determinado tipo que puede ser modificado durante la ejecución de un programa
- Constante poscición de memoria o registro identificado con un nombre cuyo valor no puede ser modificado durante la ejecución de un programa
- Instruccion operacción que indica al procesador la acción que tiene que realizar, siendo ésta una de las características del procesador su set de instrucciones
- Estructura de control Establecen el flujo de ejecución de un programa. Es decir las instrucciones se va a establecer dentro del programa. Un programa visto como un conjunto de instrucciones deberá tener unas determinadas estructuras de control que me permitan establecer el flujo de ejecución del mismo. En mayo de 1.966, dos matemáticos 'Bôhm y Jacopini' demostraron que un programa que algorítmicamente tuviera solución puede ser escrito utilizando solamente tres tipos de estructuras de control
- Sentencias o estructuras de control:
- Sentencias secuenciales
- Sentencias iterativas o repetitivas
- Sentencias selectivas
Estructras de control
Estructura secuencial
Consiste en poner una instrucción detrás de otras. El orden de ejecución es secuncial y en orden (Excepción a esta regla los procesadores fuera de orden e instrucciones independientes).
Instrucciones secuenciales
- Inicio/fin
- declaracion
- asignacion
- leer/escribir)
Instrucción inicio/fin de bloque
Un programa es un bloque de instrucciones que tiene un inicio y un fin. Dentro de este bloque puede haber muchos bloques. Siempre cada bloque empezará y terminará con una instrucción de inicio /fin bloque respectivamente
programa MiPrograma
inicio
bloque_dentro_de_mi_programa
inicio
instruciones
fin
...
instrucciones
fin
En java el bloque inicio y fin está especificado con los caracteres { y } respectivamente
void cabecera_de_un_bloque_principal() { void otro_bloque_B() { //instricciones_bloque_B } //instrucciones del bloque princial }
Muy importante es la indentación es decir que todas las instrucciones de un determinado bloque vayan indentadas a un mismo nivel, con el mismo margen. Cada nuevo nivel de bloque aumento la sangría o margen. Si cierro el bloque vuelvo a niveles anteriores.
(: Algunos lenguajes como Python usan directamente la indentación como inidicador de inicio/fin de bloque)
Instrucción de declaración
Sirve para declarar elementos dentro del programa En un programa se pueden declarar
- variables
- constantes
- subprogramas (funciones, procedimientos. En terminología OO métodos)
- En este apartado hay que saber que depende del lenguaje de programacion.
- En función del lenguaje de programación, las variables deben de ser declaradas antes de usarlas (lenguajes fuertemente tipados). Existen otros lenguajes, que si bien los valores con los que trabaja siempre tienen un tipo, este no ha de ser declarado antes de utilizarlo, si no que implícitamete es declarada la primera vez que se utiliza.
La forma de realizar una declaración de variable será
tipo_variables identificador_variable
Necesito declarar el tipo para saber cuanto espacio de memoria debo reservar para almacer el valor de la variable. por ejemplo en un entero puede ser que necesite 2 bytes, pero en un float 8 bytes
identificador_constante = valor
Respecto a los tipos de variable, en otro apartado realizaremos una clasificación más estricta, pero de momento podemos considear
entero o int cadena_caracteres o String real o float booano o boolean
Identificador es un nombre que identifica a la variable.Existen reglas para crear los identificadores y éstas dependen del lenguaje para el que estemos escribiendo código. Por ejemplo en PHP tienen que empezar por $ En java los identificadores siguen la siguiente expresión regular
[a..zA..Z][a..zA..Z|0..9|_]*
Veamos ejemplos de declaración de variables
//Declaramos tres variables (edad, nombre, raiz) de los tipos que precede (entero, string o cadena de caracteres y real o float) int edad; String nombre; float raiz;
Ejemplos de declaración de constantes En principio en la constante no necesito saber el tipo con lo que en muchos lenguajes directamente uso identificador y valor
constante IVA = 3.14; constante MESES = 12;
En java sí que necesito el tipo, ya que no tengo por qué inicializar la constante en el momento de su definición sino en cualquier momento. Eso si, una vez inicializada ya no puedo modificar su valor (como buena constante que es)
//Defino una constante { final float IVA = 3.14; fina int MESES = 12; final float pi = 3.1416; // … mas instrucciones } <source lang=java> //Defino un método ''subprograma'' para que calcule la edad a partir de la fecha de nacimiento //Observamos que devuelve un entero int calculaEdad(Date fnac) { Date fecha = new Date(); int edad; edad = fnac-fecha; return edad; }
instrucción de asignación
Consiste en asignar un valor a una variable
a = valor
La parte de la izquierda siempre será una variable posición de memoria donde almacenaré el valor
valor se puede expresar de diferentes maneras:
- literal Directamente aporto el valor, constante o identificador de variable que directamente me da el valor.
- expresión ==> es un predicado con operadores que es evaluado y de su evaluación obtengo un valor. En función de los operadores las expresiones serán de diferente tipo:
- expresiones booleanas o lógicas( operador booleano AND, OR, NOT). Su evaluación me da un valor booleano (VEDAD o FALSO)
- expresiones aritméticas operadores (+,-,*,/,MOD,) (SU EVALUACIÓN ME DA UN NÚMERO)
- expresiones de comparación (=,>,<,>=,<=,!=) (Su evaluación me dá un valor booleano VERDAD o FALSO)
- Función o método que retorna dicho valor: Es un bloque de ejecución independiente que o bien lo escribo yo en otra parte de este bloque o bien ya está disponibles en el conjunto de funciones o bilbiotecas o API que el entorno me ofrece para utilizar directamente. Por ejemplo antes hemos escrito el método calculaEdad...
Instrucciones de leer/escribir
En realidad aquí depende de los lenguajes, algunos como Pascal y Modula tiene dentro del lenguaje una instrucción para visualizar un texto por la pantalla y otra para leerlo del teclado y asignárselo a una variable. Otros (la mayoría), como Java, C, python,... esta funcionalidad nos la brinda una función de una biblioteca que previamente debe ser cargada. Otros como PHP tienen ambas cosas echo (parte del lenguaje), print función del sistema, ambas para visualizar caracteres por pantalla. En general con cualquier lenguaje podremos:
visualizar(”cadena de caracteres , valor de variable” + variable+”expresion)
y para leer un valor que el usuario introduzca por el teclado y almacenarlo en una variable
void MiPrograma { visualizar (“Introduce tu edad”); leer edad; visualizar (“Tu edad es de”+ edad); }
En java como veremos realizan esta acción los siguientes métodos. La lectura de datos del teclado es un poco más compleja de entender pero podrímaos ver
Scanner linea = new Scanner(System.in);
System.out.println(“Introduce tu edad”);
edad = linea.getInt();
System.out.println(“Tu edad es de “+edad);
</source>
- Lenguaje de programación
Conjunto de lexemas que se combinan siguiente unas reglas de construcción o sintaxis y que tienen un significado definido o semántica que se emplea para expresar un algoritmo codificándolo en dicho lenguaje, constituyendo un programa escrito en un leguaje de alto nivel. dicho programa una máquina computacional no puede ser capaz de ejecutar
El lenguaje va acompañado de uno o varios programas (compilador o interprete )que es capaz de generar código máquina a partir del programa expresado en este lenguaje
- Niveles de lenguajes
En función de la proximidad de compresión del lenguaje al lenguaje humano se puede hablar de tres niveles de lenguajes de programación.
- Alto nivel
El lenguaje utiliza lexemas y estructuras sintácticas similares al utilizado en el lenguaje humano
- Bajo nivel
El lenguaje es más próximo a la máquina. Aunque se pueden utilizar lexemas como es el caso de ensamblador, éstos tienen una traducción directa al código máquina 0's y 1's
- Nivel de lenguaje máquina
Conjunto de 0'1 y 1's que corresponden a códigos binarios que el procesador es capaz de entender y ejecutar
- Proceso de transformación
- Pasar de código de alto nivel a código máquina. Este proceso puede ser una mera traducción como es el caso de pasar de ensamblador a código máquina
- Lenguajes compilados
- Lenguajes interpretados
- Java un caso especial
- lenguaje semicompilado
- Para que programar
Ejemplos
Existen diferentes modos de expresar un algoritmo
Elementos en un lenguaje de programación
- Tipo de dato conjunto de valores para los cuales hay definidos una serie de operaciones
- Variable posición de menoria o registro identificado con un nombre (identificador)cuyo contenido va a almacenar un valor de un determinado tipo que puede ser modificado durante la ejecución de un programa
- Constante poscición de memoria o registro identificado con un nombre cuyo valor no puede ser modificado durante la ejecución de un programa
- Instruccion operacción que indica al procesador la acción que tiene que realizar, siendo ésta una de las características del procesador su set de instrucciones
- Estructura de control Establecen el flujo de ejecución de un programa. Es decir las instrucciones se va a establecer dentro del programa. Un programa visto como un conjunto de instrucciones deberá tener unas determinadas estructuras de control que me permitan establecer el flujo de ejecución del mismo. En mayo de 1.966, dos matemáticos 'Bôhm y Jacopini' demostraron que un programa que algorítmicamente tuviera solución puede ser escrito utilizando solamente tres tipos de estructuras de control
- Sentencias o estructuras de control:
- Sentencias secuenciales
- Sentencias iterativas o repetitivas
- Sentencias selectivas
Paradigmas de programación
Concepto
- Paradigma de programa es un conjunto de técnicas o filosofías bien definidas que usamos para realizar programación.
- No quiere decir que un programa siempre siga un paradigma concreto, puede seguir varios.
- Las implementaciones de programas en alto nivel se realizan usando un lenguaje de programación (o varios) concretos.
- Un mismo lenguaje se puede usar para diferentes paradigmas
- Cuando hablamos de paradigmas de la programación intentamos descubrir las diferentes formas de enfocar y desarrollar la programación atendiendo a determinadas reglas
=Paradigma imperativo
Este paradigma presenta dos partes diferenciadas:
- una estática
- una dinámica:
- Parte estática:
- ValoresTipos de datos, variables y constantes. Independientemente de que el lenguaje sea no tipado (C, Modula, Pascal Vs PHP, Python,) o más fuertemente tipado (c), o más débilmente tipado (Basic),
- En memoria almacenamos los valores de los datos con los que estamos trabajando dentro del programa. Estos valores los utilizan y modifica la parte dinámica del programa.
- Parte dinámica: Procedimientos y funciones
- Conjuntos de instrucciones que operan sobre valores y realizan acciones
=Paradigma imperativo
El siguiente ejemplo no completo en su solución (dado que hay dos soluciones y que puede ser que no sean reales sino complejas conjugadas), ilustra como procedemos de forma imperativa usando datos e instrucciones para realizar un programa.
Paradigma imperativo
- Modulacion
'DIVIDE Y VENCERAS'
- Dividir el problema a resolver en partes mas pequeñas o subproblemas.
- Dar solución a cada una de las partes
- Unir las soluciones para solucionar el problema inicial
- Es una filosibía de 'Divides y vencerás
- Es más fácil resolver un problema sencillo que uno complejo
- Es efectivo y práctic