Fundamentos y teoría de la programación
Enviado por Anónimo y clasificado en Informática
Escrito el en español con un tamaño de 16,12 KB
Tema 1: Introducción a la informática.
- Informática:Conjunto de conocimientos científicos, técnicas y tecnologías que hacen posible eltratamiento automático de la información.
- Sistema informático:Sistema que procesa la información. Entidades interrelacionadas que procesaninformación. Hardware (procesador), software (programa), peopleware (calculadora).
Tema 2: Programación y lenguajes.
-Programas:Conjunto de instrucciones que indican al computador que tiene que hacer de formaprecisa y exacta.
-Los programas no son inteligentes.
-No tienen iniciativa.
-No tienen imaginación ni inventiva.
-Modelo: Simplificación de la realidad que permite abastraer los detalles supérfluos y centrarnos en loverdaderamente importante.
-Lenguaje de programación:
Según su nivel de abstracción:
- Lenguaje máquina.
- Lenguaje ensamblador.
- Lenguaje de alto nivel: C, C++...
- Lenguaje 4G: SQL...
- Lenguajes basados en componentes: NesC...
- Lenguaje de modelado
- Declarativos (Prolog, LISP)...
- Imperativos (C, Java, C++...).
- Compiladores
- Interpretados
Un lenguaje de programación tiene dos componentes básicos:
- Sintaxis:¿Qué y como se puede escribir? (Vocabulario y reglas de escritura).- Semántica:¿Qué significa lo que escribo?
- Errores de un programa:
- Programar de manera sistemática, ordenada y siguiendo las convenciones reduce considerablemente los errores semánticos.
- Diseñar antes de programar, como norma. Es muy importante.
-Tipos de errores:
-Errores que se detectan en tiempo de compilación. Son siempre errores sintácticos. El compilador chequea la sintaxis.
-Errores que se detectan en tiempo de ejecución.
-Errores ajenos al programador.
-Errorres culpa del programador.
-Mecanismo de excepciones en Java.
-Algoritmia:Estudio de los procedimientos óptimos para llevar a cabo la resolución de un problema.
-Algoritmo:Receta para resolver un problema.
-Eficiencia:Todos los algoritmos tienen una eficiencia. Eficiente es aquello que realiza una tarea deforma óptima. La eficiencia de un algoritmo se mide por órdenes.
-Eficaz:Un algoritmo es eficaz cuando realiza correctamente el problema para el cual ha sidoconcebido.
-Ingeniería del software:Principios y técnicas para desarrollos de software de forma ingenieril.
-Análisis:Captura y análisis de requisitos.
-Funcionales.
-No funcionales: precio, tiempo de desarrollo, modificabilidad y extensibilidad, tiempo de
ejecución global...
- Diseño:Se hacen varios diseños para que el cliente decida cual quiere.- Implementación:Parte menos creativa. Codifica un diseño.
- Pruebas ó v&v(validación y verificación).
- Mantenimiento del Software (80%):
- Extensión y actualizaciones (10%).
- Solución de problemas y errores (60%). - Realizar pruebas periódicas (30%).
Tema 3: Introducción a la programación.
Tema 4: Programación estructurada.
- Principios de la programación estructurada:
1º.- Todo programa es una secuencia de instrucciones.
2º.- Principio de apilamiento: cualquier acción puede sustituirse por dos o más acciones en secuencia.
3º. - Principio de anidamiento: cualquier acción puede sustituirse por cualquiera de las 3 estructuras de control válidas que existen y que son:
-Secuencia.
-Selección o bifurcación.
-Iteración o repetición.
-Todas las estructuras de control tienen un único punto de entrada y un único punto de salida.
Nota: estas normas pueden aplicarse cuantas veces sea necesario.
Tema 5: Abstracción procedimental y de datos.
Programación estructurada (tema 4).
Programación modular - Principio "Divide y vencerás".
- Ventajas de la programación modular.
1º Encapsulación algorítmica: módulos pueden verse como operadores generalizados que toman unos parámentros de entrada (0 o más) y producen unos resultados de salida (0 o más).
-Ventaja derivada: Si necesitamos corregir, mejorar o cambiar un módulo sólo tenemos que modificar su declaración.
-La programación modular consigue código más fácil de modificar y de depurar.
2º Abstracción procedimental: una vez definido un módulo podemos reutilizarlo tantas veces como queramos sin necesidad de repetir el código. Los módulos pueden verse como cajas negras
de funcionalidad.
-Ventaja derivada: consigo código más corto, sin repeticiones y por lo tanto más legible.
-Los módulos en Java se llaman métodos.
-Tipos de clases en Java:
-Clases ejecutables.
-Clases librería.
-Librería de métodos estáticos: métodos que no requieren un objeto para ejecutarse. Se ejecutan utilizando el nombre de la clase como receptora del mensaje.
-Clases que modelan objetos.
-Estructura
-Comportamiento (métodos no estáticos).
-Parámetros de entrada de los métodos:
-En su definición a esos parámetros se les llama parámetros formales (tipo +id).
-Cuando invocamos a un método los parámetros que le pasamos se llaman parámetros actuales (valores literales o variables).
-Se instancian con:
-Paso de argumentos por valor: se pasa una copia.
-Paso de argumentos por referencia: se pasa la dirección de memoria (puntero).
-EN JAVA TODO SE PASA POR VALOR.
-Paso de valores (valor y referencia).
Los métodos tienen siempre cero o más vargumentos o parámetros de entrada. En la definición estos argumentos se llaman parámetros formales. Cuando invocamos al método, los datos que le pasamos como argumento a la entrada se denominan parámetros actuales.
En Java los parámetros formales se instancian siempre como una copia de los parámetros actuales. Los parámetros se pasan al método siempre por valor. Si dentro del método modificamos un parámetro formal, esto no tiene impacto sobre el parámetro actual (ejemplo en los apuntes).
-Sobrecarga:En Java es posible definir varios métodos (varias versiones de un mismo método) con elmismo nombre dentro de la misma clase. Cuando esto ocurre decimos que el método está sobrecargado. La forma que tiene Java de saber a qué versión de un método sobrecargado estamos invocando, es comprobar la lista de los parámetros actuales que aparecen en la llamada al método (número, tipo y orden de los parámetros).
-Dos versiones de un método están correctamente sobrecargadas si y sólo si tienen distinta firma. El tipo de retorno no influye en absoluto.
-Firma de un método:firma = nombre + lista de parámetros.
-Identificador de un método:identificador = firma + tipo de retorno.
-Abstracción.
-Abstracción de control (bucles).
-Abstracción procedimental (métodos).
-Abstracción de datos.
-Tablas (conjuntos).
-Clases.
-Tipo abstracto de datos (TAD): plantilla o estructura que define de maneraabstracta la estructura (atributos) y el comportamiento (métodos), de los objetos concretos que pertenecen a esa clase.
-Clases de tipo envoltura o wrappers.
Se usan para cuando necesitamos un objeto y no un tipo de dato primitivo. En colas, por ejemplo: un elemento enlaza con el siguiente.
-Métodos no estáticos:se ejecutan sobre instancias.
-Métodos estáticos:se ejecutan sobre clases.
Tema 6: Recursividad (vs. Iteración).
Algo recursivo o recurrente es algo que se llama a si mismo. Tiene que ver con el principio de inducción.
La recursividad consume muchísima memoria, ya que mantiene las variables del método mientras que se ejecuta, y también mucho tiempo. La recursividad es costosa pero es más natural, se prefiere. Por ejemplo, Java no puede implementar de forma recursiva el cálculo del factorial de un millón, pues cualquier computador se quedaría sin memoria, sin embargo, es necesario de implementar para poder escribir y entender ciertos programas.
-Recursividad vs. Iteración.
1.Ambas realizan una repetición:
a)Solución iterativa repite el cuerpo del bucle.
b)Solución recursiva repite las llamadas al método recursivo.
2.Ambas tienen una condición de terminación.
a)Solución iterativa: termina cuando se imcumple la condición de continuación del bucle.
b)Solución recursiva: se termina cuando una llamada alcanza el caso base (inducción) desencadenando una secuencia de vuelta atrás.
-Backtracking:sucesión de pruebas tentativas.
3.Ambas se deben diseñar para converger a la solución (principio de convergencia, y que no se salten la condición de terminación).
a)Solución iterativa: se llega a cumplir la condición de terminación (esto se debe garantizar).
b)Solución recursiva: se debe garantizar que se llegue al caso base.
- Principio importante:Toda solución recursiva puede encontrar una solución iterativaequivalente, mientras que lo contrario no siempre es cierto.
Teoría del 2º Cuatrimestre
1. La encapsulación en tiempo de desarrollo.
Construimos el interior de la clase, qué datos corresponden a la clase y qué métodos, así como su diseño.
2. La encapsulación en tiempo de ejecución.
Cuando la clase ya existe y se crean objetos de la misma, éstos se tratan como cajas negras. Los objetos encapsulan datos y métodos, de los que sólo necesitamos saber lo que hay que darle para que nos proporcione un servicio determinado. El estado de un objeto sólo debe ser modificado por medio de los métodos del propio objeto.
3. Definición de interfaces y propiedades asociadas.
Una interfaz es una colección de constantes y métodos abstractos. Las interfaces no
se usan por sí mismas, si no que se implementan en otras clases. La clase en cuestión proporciona las implementaciones de los métodos declarados en la interfaz. Una clase puede
implementar más de una interfaz, lo que nos permite cierta capacidad de herencia múltiple.
4. Abstracción.
La encapsulación es una forma de abstracción. A bajo nivel de abstracción, en una clase estaremos manipulando los datos y los métodos individualmente. A alto nivel de
abstracción, la clase se considera una unidad y sólo se usan sus servicios. (Continua).
5.Relaciones entre clases.
-Generalización es-un.
-Asociación.
-Dependencia.
6.Generalización es-un.
Esta relación se da entre un elemento general (superclase) y un caso específico (subclase, clase hija). Se trata de una relación de herencia. La clase hija hereda los atributos
(datos) y procedimientos (métodos) del padre; pudiendo añadir los suyos propios.
7. Asociación.
En una relación de asociación indicamos que una clase está compuesta de otras clases. Esto se consigue usando algún objeto de una de las clases como atributo (dato) de la
clase compuesta. La multiplicidad indica cuántos objetos están conectados en una relación de asociación.
8. Dependencia.
Es una relación de utilización, donde un cambio en el estado de un objeto (el independiente) afecta al estado del otro (el dependiente), pero no a la inversa.
9. Constructor.
Los constructores son uno o más métodos (sobrecargados), que se usan para crear objetos de una clase. Tienen el mismo nombre que la clase. Éstos no tienen tipo de retorno,
pero pueden aceptar parámetros (para inicializar variables del objeto creado).
10. Referencias.
En la asignación por referencia, si las referencias apuntan al mismo objeto, si se cambia el contenido de un objeto usando una referencia, se cambia el contenido del objeto al
que se accede usando la otra, porque en realidad estamos trabajando con el mismo objeto, aunque sean referencias distintas.
11.Modificadores.
-De visibilidad:
-public: Accesible desde cualquier lugar.
-protected: Accesible desde clase del mismo paquete o desde subclase.
-private: Accesible desde la misma clase.
-final: Modificador para declarar constantes.
-static: Hace que la variable sea global a todos los objetos de la clase.
En métodos los estáticos se pueden invocar sin tener un objeto de esa clase.
12.3 características fundamentales de la POO.
Encapsulación, herencia y polimorfismo.
13.Polimorfismo.
Es la capacidad de una referencia de conectarse a objetos de varias clases relacionadas por herencia. En términos prácticos, indica que una referencia puede referir a
cualquier objeto de su clase o a un objeto de una clase descendiente de la primera.
14. Utilidad de la abstracción.
Las clases abstractas no implementan sus métodos, lo que fuerza a las clases hijas a implementarlas como ellas quieran; si no fueran abstractas, la clase hija no estaría forzada a
elegir como implementarlo, podría usar el método heredado de su clase padre.
15.Excepciones.
-Chequeadas: Es obligatorio capturarlas con un catch o declararlas en la cláusula throws, si no pueden producir errores de compilación.
-No chequeadas: No es necesario declararlas en throws, son errores que se pueden evitar al escribir el código, como dividir entre cero, superar tamaño del array, etc.
16. Frameworks.
Aplicación semi-completa y reutilizable que puede especializarse, aplicando ciertos
mecanismos de extensión o de confirmación, para producir aplicaciones específicas, y que incluye a menudo una infraestructura de ejecución.
El punto clave de un framework es definir los puntos que pueden ser alterados o
especializados por el programador (hot spots) y los que no (código estable). Los frameworks se diseñan usando patrones de diseño.
17. Árboles binarios.
Son estructuras formadas por nodos en las que hay un primer nodo (raíz) que tiene
dos nodos descendientes y a partir de ahí todos los nodos, tienen a su vez, otros dos nodos descendientes. Cada nodo tiene un valor “V” y un hijo izquierda y otro hijo derecha.