Make your own free website on Tripod.com
Contreras Marquez Melesio
Flores Colosía César Alberto
Programación de Sistemas 1901
Tarea1

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