Polimorfismo
Una de las características fundamentales de la OOP es el polimorfísmo,
que no es otra cosa que la posibilidad de construir varios métodos con
el mismo nombre, pero con relación a la clase a la que pertenece cada
uno, con comportamientos diferentes. Esto conlleva la habilidad de enviar un
mismo mensaje a objetos de clases diferentes. Estos objetos recibirían
el mismo mensaje global pero responderían a él de formas diferentes;
por ejemplo, un mensaje "+" a un objeto ENTERO significaría
suma, mientras que para un objeto STRING significaría concatenación
("pegar" strings uno seguido al otro)
Herencia
En programación orientada a objetos, la herencia es un mecanismo que
hace posible que una clase herede todo el comportamiento y atributos de otra
clase; a traves de la herencia, una clase tiene inmediatamente toda la funcionalidad
de una clase existente, debido a esto, las nuevas clases se pueden crear indicando
unicamente en que se diferencian de la clase existente, es decir, que toma la
definicion previa de la cual es subclase, y que solo se le agrega caracteristicas
especiales que la difieren de la clase de la cual procede.
UML
UML es una especificación
de notación orientada a objetos. Se basa en las anteriores especificaciones
BOOCH, RUMBAUGH y COAD-YOURDON. Divide cada proyecto en un número de
diagramas que representan las diferentes vistas del proyecto. Estos diagramas
juntos son los que representa la arquitectura del proyecto.
Con UML se trata de olvidar el protagonismo excesivo que se le da al diagrama
de clases, es decir, se sabe su estructura pero no se sabe que le sucede a sus
diferentes partes cuando el sistema empieza a funcionar. UML introduce nuevos
diagramas que representa una visión dinámica del sistema, o sea,
gracias al diseño de la parte dinámica del sistema se puede dar
cuenta en la fase de diseño de problemas de la estructura al propagar
errores o de las partes que necesitan ser sincronizadas, así como del
estado de cada una de las instancias en cada momento. El diagrama de clases
continua siendo muy importante, pero se debe tener en cuenta que su representación
es limitada, y que ayuda a diseñar un sistema robusto con partes reutilizables,
pero no a solucionar problemas de propagación de mensajes ni de sincronización
o recuperación ante estados de error. En resumen, un sistema debe estar
bien diseñado, pero también debe funcionar bien.
UML también intenta solucionar el problema de propiedad de código
que se da con los desarrolladores, al implementar un lenguaje de modelado común
para todos los desarrollos se crea una documentación también común,
que cualquier desarrollador con conocimientos de UML será capaz de entender,
independientemente del lenguaje utilizado para el desarrollo.
UML permite la modificación de todos sus miembros mediante estereotipos
y restricciones. Un estereotipo nos permite indicar especificaciones del lenguaje
al que se refiere el diagrama de UML. Una restricción identifica un comportamiento
forzado de una clase o relación, es decir mediante la restricción
estamos forzando el comportamiento que debe tener el objeto al que se le aplica.
Paradigmas
de Programación
Los lenguajes de programación pueden ser muchos y también pueden
ser tomados de diferentes perspectivas. Un programador debe saber que conceptos
utilizar u omitir al momento de programar. Por lo tanto es importante tener
claro las caracteristicas o estilos de programación para lograr determinar
cual es la herramienta o lenguaje ideal según las caracteristicas del
sistema a implementar.Existen 5 estilos de programación fuertemente conocidos:
Programación Imperativa/Secuencial/Estructurada
Programación Orientado al Objeto
Programación Orientada al Evento
Programación Funcional
Programación Lógica
Programación
Imperativa Esta basada en el modelo von Neumann, en donde un conjunto de operaciones
primitivas realizan una ejecución secuencial. Realiza una abstracción
en el manejo de variables, expresiones e instrucciones y para programar es necesario
declarar las variables necesarias y diseñar una secuencia adecuada de
instrucciones (asignaciones).
Ejemplo: Intercambio de valores en Pascal
PROGRAM intercambio;
VAR x,y, tmp;
BEGIN
tmp := x;
x := y;
y := tmp;
END.
Algunos de los lenguajes de este tipo son Pascal, Ada y C.
Programación
Orientada al Objeto (POO) La programación orientada al objeto esta basada
en los objetos, clase, método, envió y recepción de mensajes,
herencia y polimorfismo. En donde:
Objetos: es cualquier cosa que se ofrece a la vista y afecta a los sentidos.
También se define como una entidad tangible que exhibe algún comportamiento
bien definido. En términos de programación, un objeto no necesariamente
es algo tangible (por ejemplo: un proceso). Lo que sí puede decirse de
todo objeto es que tiene estado, comportamiento e identidad.
Clases: Una clase es una colección de datos y métodos que operan
sobre los datos y sirven para definir el contenido y capacidades de algunos
objetos.
Encapsulación: Modularidad y ocultamiento de información(datos
y metodos).
Polimorfismo: es la cualidad que poseen los objetos para responder e distinto
modo ante el mismo mensaje.
Herencia: la herencia permite definir nuevas clases y comportamientos basados
en clases. Algunos de los lenguajes de este tipo son C++, Java y Smalltalk.
Programación
orientada a eventos Esta programación es el resultado de la programación
orientada al objeto. En este tipo de programación permite trabajar con
objetos y clases standard previamente definidas por la aplicación, las
cuales manejan los conceptos de encapsulasión. Las herramientas que trabajan
de esta forma por lo general se trabajan con código original de lenguajes
imperativos. Algunas herramientas de este tipo son Visual Basic (Basic), Delphi
(Pascal) y Power Builder (C).
Programación
Funcional El Programa es una Función (o un grupo de funciones). Usualmente
compuesto de Funciones más simples.
La relación entre las funciones son muy simples:
Una Función puede llamar a otra Función, o el resultado de una
Función puede ser usado como el argumento de otra Función. Las
variables, comandos y efectos laterales son exclusivos. Los programas son escritos
enteramente dentro del lenguaje de expresiones, funciones y declaraciones.
Ejemplo: Función factorial en ML
fun Factorial loop(n,f)= if n>0 then factorial loop(n-1,f*n) else f
Dos de estos lenguajes son Scheme y ML.
Programación lógica La programación Lógica está
basada en la noción de relación, debido a que en la relación
es un concepto más general de una aplicación. La Programación
Lógica es potencialmente de alto nivel, en donde: Relación :Considera
2 conjuntos de valor S y T, R es la Relación entre S y T: Para todo X
que pertenece a S y Y que pertenece a T y R(X,Y) es verdadero o falso. Los lenguajes
de Programación Lógica pueden explotar la Inteligencia Artificial.
Un lenguaje de este tipo es Prolog.
Diferencia entre lenguajes de alto y bajo nivel
Lenguajes de bajo nivel
Permiten construir las instrucciones que serán ejecutadas por la computadora
en un lenguaje más entendible y de fácil recordación para
el ser humano.
Los lenguajes de bajo nivel utilizan un lenguaje llamado lenguaje ensamblador
y cuyas instrucciones se conocen como mnemotécnicas.
Por ejemplo una instrucción como ADD m, p, b nos indica que está
sumando p con b y guarda el resultado en m. Para la persona que conoce el lenguaje
ensamblador sabe que ADD significa una adición, de igual forma otras
instrucciones como SUB, DIV, le indican a las personas que está substrayendo
o dividiendo respectivamente. Con estos mnemónicos, resulta más
sencillo construir las instrucciones a comparación del lenguaje máquina.
Los lenguajes de bajo nivel deben ser traducidos al lenguaje máquina,
que es el reconocido por la computadora. El programa que permite la traducción
de lenguaje de bajo nivel al de máquina se denomina programa ensamblador.
El programa que se escribe en el lenguaje ensamblador, en un editor de texto,
se denomina programa fuente y el programa traducido a lenguaje máquina
se llama programa objeto.
- Ventajas: Los lenguajes de bajo nivel son más fáciles de codificar
comparados con los de máquina.
o Su velocidad de cálculo.
- Desventajas: Los programas no se pueden ejecutar en otras plataformas.
o Se necesita tener conocimiento del funcionamiento interno de la máquina.
Lenguajes de alto
nivel
Son aquellos que se expresan en un lenguaje similar al de los humanos, de tal
forma que sean escritos y entendidos fácilmente, a diferencia de los
lenguajes máquina y lenguajes de bajo nivel.
- Ventajas: Las instrucciones que debe escribir el programador son mucho más
cortas y sencillas.
o El tiempo para el desarrollo de programas es muy corto comparados con otros
lenguajes de programación.
o Los programas en estos lenguajes son independientes de la máquina,
dando la posibilidad sin poca o ninguna modificación de las instrucciones
transportarlos a diferentes computadoras.
o Incluyen instrucciones de uso frecuente que ayudan al programador al desarrollo
de software.
- Desventajas: El tiempo de ejecución de los programas es mucho mayor
que el de un lenguaje máquina y el de un lenguaje de bajo nivel.
o No se aprovechan los recursos internos de la máquina.
Los lenguajes de alto nivel necesitan traductores para crear el lenguaje máquina
que es el que realmente entiende la computadora.
Nibble
4 bits juntos se les llama “nibble”. Dos nibbles forman un byte.
¿Para que vale esto? Esto es útil para el hexadecimal. Debido
a que 16=24, entonces es muy fácil convertir de hexa a binario y viceversa.
Tipos de registros en lenguaje ensamblador
Un CPU, tiene 14 registros
internos, cada uno de 32 bits, en procesadores actuales, aunque también
los hay de 64. Los 4 primeros: EAX, EBX, ECX y EDX, son registros de uso general,
los cuales pueden ser utilizados como regitros de 16 para utilizarlos de la
primera forma se omite la E en cada uno de los nombres del registro; o utilizados
como registros de 8 bits, omitiendo la E y sustituyendo la X, por la parte alta(high)
o baja(low) del registro.
Los registros son conocidos por sus nombres especificos:
AX Acumulador
BX Registro Base
CX Registro Contador
DX Registro de Datos
DS Registro de segmento de datos
ES Registro de segmento extra
SS Registro de segmento de pila
CS Registro de segmento de código
BP Registro de Apuntadores base
SI Registro índice fuente
DI Registro índice destino
SP Registro del apuntador de la pila
IP Registrode apuntador de siguiente instrucción
F Registro de banderas