PR1.2 - Programación orientada a objetos

La programación orientada a objetos (POO, u OOP según sus siglas en inglés) es un paradigma de programación que viene a innovar la forma de obtener resultados. Los objetos manipulan los datos de entrada para la obtención de datos de salida específicos, donde cada objeto ofrece una funcionalidad especial.

Muchos de los objetos pre-diseñados de los lenguajes de programación actuales permiten la agrupación en bibliotecas o librerías, sin embargo, muchos de estos lenguajes permiten al usuario la creación de sus propias bibliotecas.Está basada en varias técnicas, incluyendo herencia, cohesión, abstracción, polimorfismo, acoplamiento y encapsulamiento.

La POO es una forma de programar que trata de encontrar una solución a estos problemas. Introduce nuevos conceptos, que superan y amplían conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:
  • Clase.Definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ella.
  • Herencia. Por ejemplo, herencia de la clase C a la clase D, es la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede usar los mismos métodos y variables públicas declaradas en C. Los componentes registrados como "privados" (private) también se heredan, pero como no pertenecen a la clase, se mantienen escondidos al programador y sólo pueden ser accedidos a través de otros métodos públicos. En el caso de los componentes registrados como "protegidos" (protected) también se heredan, pero solo para esa clase, no para futuras clases heredadas. Esto es así para mantener hegemónico el ideal de POO.
  • Objeto. nstancia de una clase. Entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos), los mismos que consecuentemente reaccionan a eventos. Se corresponden con los objetos reales del mundo que nos rodea, o con objetos internos del sistema (del programa).
  • Método. Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto del sistema.

PR1.1 - Nociones sobre programación estructurada

La programación estructurada es un paradigma de programación orientado a mejorar la claridad, calidad y tiempo de desarrollo de un programa de computadora

utilizando únicamente subrutinas y tres estructuras: secuencia, selección (if y switch) e iteración (bucles for y while), considerando innecesario y contraproducente el uso de la instrucción de transferencia incondicional (GOTO), que podría conducir a "código espagueti", que es mucho más difícil de seguir y de mantener, y era la causa de muchos errores de programación.

La programación estructurada es un paradigma de programación orientado a mejorar la claridad, calidad y tiempo de desarrollo de un programa de computadora. Surgió en la década de 1960, particularmente del trabajo de Böhm y Jacopini, y una famosa carta, «La sentencia goto, considerada perjudicial», de Edsger Dijkstra en 1968 — y fue reforzado teóricamente por el teorema del programa estructurado, y prácticamente por la aparición de lenguajes como ALGOL con adecuadas y ricas estructuras de control. Ejemplo en BASIC estructurado:

El teorema del programa estructurado, propuesto por Böhm-Jacopini, demuestra que todo programa puede escribirse utilizando únicamente las tres instrucciones de control siguientes:
  • Secuencia.
  • Instrucción condicional.
  • Iteración (bucle de instrucciones) con condición al principio.
Solamente con estas tres estructuras se pueden escribir todos los programas y aplicaciones posibles. Si bien los lenguajes de programación tienen un mayor repertorio de estructuras de control, estas pueden ser construidas mediante las tres básicas citadas.

Es posible hacer la programación estructurada en cualquier lenguaje de programación, aunque es preferible usar algo como un lenguaje de programación procedimental. Algunos de los lenguajes utilizados inicialmente para programación estructurada incluyen: ALGOL, Pascal, PL/I y Ada

Posteriormente a la programación estructurada se han creado nuevos paradigmas tales como la programación modular, la programación orientada a objetos, programación por capas, etc., y el desarrollo de entornos de programación que facilitan la programación de grandes aplicaciones y sistemas. Leer completo en wikipedia.org

LM. 1.3 - Estructura HTML. Elemento BODY

Etiqueta BODY. Delimita el cuerpo del documento. Va a continuación de la etiqueta HEAD.

En BODY van todos los contenidos de la página (texto, imágenes...) Todo lo que queremos mostrar a los lectores de nuestro documento. Sus etiquetas son: <body>, (Para delimitar el comienzo); y </body>, (al terminar, siempre antes de </html>).

La etiqueta <body> puede tener los siguientes atributos:
  • text="..." color del texto
  • link="..." color de enlaces no visitados
  • vlink="..." color de enlaces visitados
  • alink="..." color del link activo
  • bgcolor="..." color del fondo
  • background="..." Imagen de fondo
Aunque se recomienda utilizar hojas de estilos para tal fin, podemos encontrarnos con etiquetas en el body, veámos por ejemplo:

Elemento BODY


El diseño en HTML, aparte de cumplir con las especificaciones propias del lenguaje, debe respetar ciertos criterios de accesibilidad web, siguiendo unas pautas o las normativas y leyes vigentes en los países donde se regule dicho concepto. Se encuentra disponible y desarrollado por el W3C a través de las Pautas de Accesibilidad al Contenido Web 1.0 WCAG

LM. 1.2.1 - Estructura HTML. Elemento HEAD

head viene del ingles cabeza y su función es delimitar cabecera del documento. La cabecera es la sección apropiada para incluir información sobre el documento, la mayoría de la cual no será mostrada a los lectores. Para incluir esta información tenemos diversos elementos, de momento solo comentaremos el más importante:
Estructura HTML. Elemento HEAD
<head>: define la cabecera del documento HTML; esta cabecera suele contener información sobre el documento que no se muestra directamente al usuario como, por ejemplo, el título de la ventana del navegador. Dentro de la cabecera <head> es posible encontrar:
<title>: define el título de la página. Por lo general, el título aparece en la barra de título encima de la ventana.
<link>: para vincular el sitio a hojas de estilo o iconos. Por ejemplo:<link rel="stylesheet" href="/style.css" type="text/css">.
<style>: para colocar el estilo interno de la página; ya sea usando CSS u otros lenguajes similares. No es necesario colocarlo si se va a vincular a un archivo externo usando la etiqueta <link>.
<meta>: para metadatos como la autoría o la licencia, incluso para indicar parámetros http (mediante http-equiv="") cuando no se pueden modificar por no estar disponible la configuración o por dificultades con server-side scripting. Apuntes sobre meta tags
<head>: también admite etiquetas <script></script> para procesar javascript, aunque al igual que las etiquetas <style></style> se recomiendan usar en una archivos separados vinculandolos en lugar de escribir directamente en ellos. Por lo que podriamos encontrarnos con la siguiente estructura, por ejemplo:

LM. 1.1 - Esctructura básica de un documento HTML

HTML, sigla en inglés de HyperText Markup Language (lenguaje de marcas de hipertexto), hace referencia al lenguaje de marcado para la elaboración de páginas web. Es un estándar que sirve de referencia del software que conecta con la elaboración de páginas web en sus diferentes versiones, define una estructura básica y un código (denominado código HTML) para la definición de contenido de una página web,

Un documento HTML 4 (obsoleto) se compone de tres partes:
  • una línea que contiene información sobre la versión de HTML,
  • una sección de cabecera declarativa (delimitada por el elemento HEAD),
  • un cuerpo, que contiene el contenido real del documento. El cuerpo puede ser especificado mediante el elemento BODY o mediante el elemento FRAMESET.
Puede aparecer espacio en blanco (espacios, saltos de línea, tabulaciones y comentarios) antes y después de cada sección. Las secciones 2 y 3 deberían estar delimitadas por el elemento HTML.

Aquí tenemos un ejemplo de un documento HTML sencillo:
Información sobre la versión de HTML. DOCTYPE

Un documento HTML válido declara qué versión de HTML se utiliza en el documento. Este elemento, que muchos websmaster obvian (incorrectamente), le indica al navegador la versión y tipo de HTML empleado en el documento. De esta forma, el navegador usará el modelo de renderización adecuado al tipo de documento.

Para HTML 4.01. (obsoleto) existen 3 tipos de doctype:
Esctructura básica de un documento HTML
El URI que aparece en la declaración del tipo de documento permite a los agentes de usuario descargar el DTD y los conjuntos de entidades que sean necesarios. Los siguientes URIs (relativos) se refieren a los DTDs y conjuntos de entidades de HTML 4:
  • "strict.dtd" -- DTD estricto por defecto
  • "loose.dtd" -- DTD no estricto
  • "frameset.dtd" -- DTD para documentos con marcos
  • "HTMLlat1.ent" -- entidades Latin-1
  • "HTMLsymbol.ent" -- entidades Symbol
  • "HTMLspecial.ent" -- entidades especiales
Las dos últimas letras de la declaración indican el idioma del DTD. Para HTML, éste es siempre inglés ("EN").

En HTML5:
Esctructura básica de un documento HTML5
Se reduce la definición del tipo de documento a una única posibilidad, por lo que no tenemos que preocuparnos de elegir el tipo de documento correcto:

BD 1.3 - Tipos de Comandos en SQL

Los comandos SQL son instrucciones codificadas en sentencias, que se utilizan para comunicarse con la base de datos para realizar tareas específicas, el trabajo, las funciones y las consultas con los datos. Pueden dividirse en tres subgrupos:

DDL es el nombre corto de "Data Definition Language", que trata de esquemas y descripciones de bases de datos, de cómo los datos deben residir en la base de datos.
  • CREATE – to create objects in the database
  • ALTER – alters the structure of the database
  • DROP – delete objects from the database
  • TRUNCATE – remove all records from a table, including all spaces allocated for the records are removed
  • COMMENT – add comments to the data dictionary
  • RENAME – rename an object

DML es el nombre corto de "Data Manipulation Language" que se ocupa de la manipulación de datos, e incluye sentencias SQL más comunes, SELECT, INSERT, UPDATE, DELETE, etc., y se utiliza para almacenar, modificar, recuperar, eliminar y actualizar los datos en la base de datos.
  • SELECT – retrieve data from the a database
  • INSERT – insert data into a table
  • UPDATE – updates existing data within a table
  • DELETE – Delete all records from a database table
  • MERGE – UPSERT operation (insert or update)
  • CALL – call a PL/SQL or Java subprogram
  • EXPLAIN PLAN – interpretation of the data access path
  • LOCK TABLE – concurrency Control

DCL es nombre corto de "Lenguaje de control de datos", que incluye comandos como GRANT, y sobre todo preocupados por los derechos, permisos y otros controles del sistema de base de datos.
  • GRANT – allow users access privileges to database
  • REVOKE – withdraw users access privileges given by using the GRANT command

BD 1.2 - Tipos de Campos en MySQL

El asignar un tipo a cada campo es para optimizar la base de datos y agilizarla. Los tipos de datos que puede haber en un campo, se pueden agrupar en tres grandes grupos.

Aunque dentro de cada uno de ellos hay mucha variedad, Nos servirán entre otros para crear tablas del tipo:


Tipos Numéricos

TINYINT[(M)]
Entero muy pequeño (-128 a 127 con signo / 0 a 255 sin signo)
BIT/BOOL/BOOLEAN
Cero es falso. Valores no zero son considerados verdaderos.
SMALLINT[(M)]
Entero pequeño (-32768 a 32767 con signo / 0 a 65535 sin signo).
MEDIUMINT[(M)]
Entero medio (-8388608 a 8388607 con signo / 0 a 16777215 sin signo).
INT[(M)]
Entero (-2147483648 a 2147483647 con signo / 0 to 4294967295 sin signo).
INTEGER[(M)]
Sinónimo de INT
BIGINT[(M)]
Entero grande (-9223372036854775808 a 9223372036854775807 con signo / 0 to 18446744073709551615 sin signo)
FLOAT[(M,D)]
Número coma flotante pequeño.
DOUBLE[(M,D)]
Número coma flotante normal.
DOUBLE PRECISION[(M,D)]
Sinónimos de DOUBLE.
DECIMAL[(M[,D])]
Número con decimal fijo. Se comporta com un CHAR. M es el total de dígitos y D es el número de decimales.


Tipos Fecha y Hora

DATE
Fecha. Rango de '1000-01-01' a '9999-12-31'. Formato: 'YYYY-MM-DD'.
DATETIME
Combinación de fecha y hora. Rango de '1000-01-01 00:00:00' a '9999-12-31 23:59:59'. Formato: 'YYYY-MM-DD HH:MM:SS'.
TIMESTAMP[(M)]
Rango de '1970-01-01 00:00:00' a aproximadamente el año 2037.
TIME
Tiempo. Rango de '-838:59:59' a '838:59:59'. Formato: 'HH:MM:SS'.
YEAR[(2|4)]
Año en 2 dígitos o 4 dígitos. Rango de 1901 to 2155, and 0000 para 4 dígitos y de 70 a 69 (de 1970 a 2069) para 2 dígitos.


Tipos String

CHAR(M) [BINARY | ASCII | UNICODE]
Cadena de carácteres de longitud fija. M de 0 a 255.
CHAR
Sinónimo de CHAR(1).
VARCHAR(M) [BINARY]
Cadena de carácteres de longitud variable. M de 0 a 255.
TINYBLOB/TINYTEXT
Una columna BLOB o TEXT de como máximo 255 carácteres.
BLOB/TEXT
Una columna BLOB o TEXT de como máximo 65,535 carácteres.
MEDIUMBLOB/MEDIUMTEXT
Una columna BLOB o TEXT de como máximo 16,777,215 Caracteres
LONGBLOB/LONGTEXT
Una columna BLOB o TEXT de como máximo 4,294,967,295 carácteres.
ENUM('value1','value2',...)
Enumeración. Cadena de carácteres que sólo puede tener un valor dado en la lista.
SET('value1','value2',...)
Lista que puede tener valor cero o más valores. Deben estar en la lista y como máximo pueden haber 64 miembros.

LM1.2.2 - Algunos Apuntes sobre Meta Tags

Los Meta-Tags están pensados para los buscadores y son muy importantes para el posicionamiento:

Para "refrescar" una página o redirigirla a otra, transcurrido un cierto tiempo:
<meta http-equiv="refresh" content="20;URL=./indice.htm" > El tipo es http-equiv="refresh", en content le decimos el número de segundos (si indicamos CERO será inmediato) y a continuación indicamos la página a la que debe dirigirse, para ello usamos URL=nombre de la página.
En este ejemplo, se cargará la página indice.htm que esté en el directorio actual transcurridos 20 segundos.

Las palabras claves que los "robots" usarán:
<meta name="Keywords" content="las palabras separadas por comas" > Este tag lo usarán los "robots" enviados por los buscadores y se usará para indicar las palabras claves relacionadas con la página en cuestión.

La descripción de la página:
<meta name="Description" content="descripción de la página" > Este tag lo usan los buscadores para dar una descripción del contenido de la página.

Si los "Robots" deben tener en cuenta esta página o no:
<meta name="Robots" content="ver los valores" > El valor de content puede ser:
all para que el robot tenga en cuenta esta página y pueda seguir los links contenidos en la misma (este es el valor predeterminado)
noindex para que no la tenga en cuenta.
none que es lo mismo que noindex, nofollow
index para que la tenga en cuenta
follow para que pueda seguir los links que haya en la página
nofollow lo contrario de follow.

La fecha en la que expira una página:
<meta http-equiv="expires" content="fecha en formato GMT" > La fecha en la que dicha página expira y por tanto el navegador "refrescará" el contenido después de esa fecha.
En el caso de que el valor de content sea -1, no se guardará en el caché, en teoría lo mismo que si fuese 0.
Si se usan páginas ASP, se puede usar también: Response.Expires = -1

Para que no se guarde la página en el caché:
<meta http-equiv="Pragma" content="no-cache" > Esto le indica al navegador que no guarde la página en el caché.
Este meta-tag no es válido para el Internet Explorer y según la Knowledge Base, es preferible usar el método indicado arriba, es decir usar "expires" y en content -1:
<meta http-equiv="expires" content="-1" > A ver si es cierto... ya que esto es el que yo necesito para evitar los problemillas que algunas veces me contáis de que no se ve la página correcta...

Evitar que una página se muestre dentro de un frame:
<meta http-equiv="Window-target" content="_top" > En Content podemos usar:
_top para indicar que se muestre en la página completa, no dentro de un frame,
_blank para que se muestre en una nueva ventana

ED1.3 - Desarrollo de software

Desarrollo de software: es todo el proceso que ocurre desde que se concibe una idea hasta que el programa está implementado en el
sistema informático y funcionando. El proceso de desarrollo consta de una serie de pasos de obligado cumplimiento. Sólo así podremos garantizar que los programas creados sean:
  • Eficientes
  • Fiables
  • Seguros
  • Responden a las necesidades de los usuarios finales
Según el orden y la forma en que se lleven a cabo estas etapas, hablaremos de diferentes CICLOS DE VIDA del software. y para ello haremos referencia a lo siguiente:
  • Análisis: La fase de análisis define los requisitos del software que hay que desarrollar.
  • Diseño: En esta etapa se pretende determinar el funcionamiento de una forma global y general, sin entrar en detalles.
  • Codificación: La fase más obvia en el proceso de desarrollo de software es sin duda la codificación. Es más que evidente que una vez definido el software que hay que crear haya que programarlo.
  • Pruebas: Con una doble funcionalidad, las pruebas buscan confirmar que la codificación ha sido exitosa y que el software no contiene errores, a la vez que se comprueba que el software hace lo que debe hacer, que no necesariamente es lo mismo.
  • Documentación: Debe mostrar una información completa y de calidad que ilustre mediante los recursos más adecuados cómo manejar la aplicación. También se debe realizar una documentación técnica destinada a ser leída por los demás desarrolladores que trabajen en la aplicación.
  • Explotación: Una vez que tenemos nuestro software, hay que prepararlo para su distribución. Para ello se implementa el software en el sistema elegido o se prepara para que se implemente por sí solo de manera automática.
  • Mantenimiento: En esta fase del desarrollo de un software se arreglan los fallos o errores que suceden cuando el programa ya ha sido implementado en un sistema y se realizan las ampliaciones necesitadas o requeridas.

ED1.2 - La relación Software-Hardware

Debemos distinguir los diferentes lenguajes de programación y los procesos que ocurren hasta que el programa funciona y realiza la acción deseada.
  1. Al conjunto de dispositivos físicos que conforman un sistema informático se le denomina hardware.
  2. Existe una relación indisoluble entre éste y el software, ya que necesitan estar instalados y configurados correctamente para que el equipo funcione.
  3. El software se ejecutará sobre los dispositivos físicos.
  4. La primera arquitectura hardware con programa almacenado se estableció en 1946 por John Von Neumann
La relación software-hardware la podemos poner de manifiesto desde dos puntos de vista:

Desde el punto de vista del sistema operativo
  • El sistema operativo es el encargado de coordinar al hardware durante el funcionamiento del ordenador, actuando como intermediario entre éste y las aplicaciones que están corriendo en un momento dado.
  • Todas las aplicaciones necesitan recursos hardware durante su ejecución (tiempo de CPU, espacio en memoria RAM, tratamiento de interrupciones, gestión de los dispositivos de Entrada/Salida, etc.).
  • Será siempre el sistema operativo el encargado de controlar todos estos aspectos de manera “transparente" para las aplicaciones (y para el usuario).

Desde el punto de vista de las aplicaciones
  • Ya hemos dicho que una aplicación no es otra cosa que un conjunto de programas, y que éstos están escritos en algún lenguaje de programación que el hardware del equipo debe interpretar y ejecutar.
  • Hay multitud de lenguajes de programación diferentes (como ya veremos en su momento).
  • Sin embargo, todos tienen algo en común: estar escritos con sentencias de un idioma que el ser humano puede aprender y usar fácilmente.
  • Por otra parte, el hardware de un ordenador sólo es capaz de interpretar señales eléctricas (ausencias o presencias de tensión) que, en informática, se traducen en secuencias de 0 y 1 (código binario).

ED1.4 - Metodologías de desarrollo ágil de aplicaciones

Manifiesto ágil: ( Enlace ) Tiene su origen en 2001, de la mano de Kent Beck. En el que se plantearon técnicas y metodologias alternativas mucho más ágiles para el desarrollo de software, también denominado "extreme programming".

Sus valores:
  1. Los individuos y su interacción, por encima de los procesos y las herramientas.
  2. El software que funciona, por encima de la documentación exhaustiva.
  3. La colaboración con el cliente, por encima de la negociación contractual.
  4. La respuesta al cambio, por encima del seguimiento de un plan.

Sus principios:
  • Nuestra principal prioridad es satisfacer al cliente a través de la entrega temprana y continua de software de valor.
  • Son bienvenidos los requisitos cambiantes, incluso si llegan tarde al desarrollo. Los procesos ágiles se doblegan al cambio como ventaja competitiva para el cliente.
  • Entregar con frecuencia software que funcione, en periodos de un par de semanas hasta un par de meses, con preferencia en los periodos breves.
  • Las personas del negocio y los desarrolladores deben trabajar juntos de forma cotidiana a través del proyecto.
  • Construcción de proyectos en torno a individuos motivados, dándoles la oportunidad y el respaldo que necesitan y procurándoles confianza para que realicen la tarea.
  • La forma más eficiente y efectiva de comunicar información de ida y vuelta dentro de un equipo de desarrollo es mediante la conversación cara a cara.
  • El software que funciona es la principal medida del progreso.
  • Los procesos ágiles promueven el desarrollo sostenido. Los patrocinadores, desarrolladores y usuarios deben mantener un ritmo constante de forma indefinida.
  • La atención continua a la excelencia técnica enaltece la agilidad.
  • La simplicidad como arte de maximizar la cantidad de trabajo que no se hace, es esencial.
  • Las mejores arquitecturas, requisitos y diseños emergen de equipos que se auto-organizan.
  • En intervalos regulares, el equipo reflexiona sobre la forma de ser más efectivo y ajusta su conducta en consecuencia.

SI2.2 - Lenguaje Ensamblador

Lenguaje Ensamblador: se trata fundamentalmente de un lenguaje de programación de bajo nivel que está directamente por encima del código maquina. El lenguaje ensamblador refleja directamente la arquitectura y las instrucciones en lenguaje de máquina de la CPU, y pueden ser muy diferentes de una arquitectura de CPU a otra.

Cada arquitectura de microprocesador tiene su propio lenguaje, y en consecuencia su propio lenguaje ensamblador (por ejemplo, las familias Intel y MAC poseen arquitecturas diferente y por lo tanto precisan su porpio lenguaje ensamblador)

                                                                 1. Compilados
·         Tipos de Ejecutables:      2. Compilados e interpretados (por ejemplo:  JAVA)
                                                                 3. Interpretados (Script,  Javascript, PHP)

 * Usaremos a modo de ejemplo el Emu8086:
El código maquina puede tener hasta un máximo de 6 Bytes.

¿Cómo sabe el microprocesador cuando un Byte es un dato, o una instrucón, etc.?
  • En algún sitio del hardware, en la unidad de control (en un lugar llamado "Juego de instrucciones") en el que cada microprocesador tiene el suyo propio.
  • La unidad de control es uno de los tres bloques funcionales en los que se divida una unidad central de procesamiento (CPU). Los otros son la unidad de proceso y el bus de entrada/salida.
  • También te puede interesar siguiendo por esta linea, la entrada en este blog sobre la arquitectura de Von Neumann, ya que la mayoría de las computadores actuales están basados en esta arquitectura.
Si te interesa saber más sobre cómo funciona el EMU8086, y hacer tus primeros pinitos en lenguaje ensamblador puedes descargártelo de la página oficial: www.emu8086.com Pero ojo es una version Demo, para adquirirla de forma completa recomiendo googlear.