jueves, 21 de abril de 2011

POLIMORFISMO

En programación orientada a objetos el polimorfismo se refiere a la capacidad para que varias clases derivadas de una antecesora utilicen un mismo método de forma diferente.
Por ejemplo, podemos crear dos clases distintas: Pez y Ave que heredan de la superclase Animal. La clase Animal tiene el método abstracto mover que se implementa de forma distinta en cada una de las subclases (peces y aves se mueven de forma distinta).
Como se mencionó anteriormente, el concepto de polimorfismo se puede aplicar tanto a funciones como a tipos de datos. Así nacen los conceptos de funciones polimórficas y tipos polimórficos. Las primeras son aquellas funciones que pueden evaluarse o ser aplicadas a diferentes tipos de datos de forma indistinta; los tipos polimórficos, por su parte, son aquellos tipos de datos que contienen al menos un elemento cuyo tipo no está especificado.
CLASIFICACION
Se puede clasificar el polimorfismo en dos grandes clases:
§  Polimorfismo dinámico (o polimorfismo paramétrico) es aquél en el que el código no incluye ningún tipo de especificación sobre el tipo de datos sobre el que se trabaja. Así, puede ser utilizado a todo tipo de datos compatible.
§  Polimorfismo estático (o polimorfismo ad hoc) es aquél en el que los tipos a los que se aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de poder ser utilizados.
El polimorfismo dinámico unido a la herencia es lo que en ocasiones se conoce como programación genérica.
También se clasifica en herencia por redefinición de métodos abstractos y por método sobrecargado. El segundo hace referencia al mismo método con diferentes parámetros.
Otra clasificación agrupa los polimorfismo en dos tipos: Ad-Hoc que incluye a su vez sobrecarga de operadores y coerción, Universal (inclusión o controlado por la herencia, paramétrico o genericidad).

CONCEPTOS DE P.O.O

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 ellas.
Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.
Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto que se esté usando. O dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecución", esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.

Herencia: las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y extender) su comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en árboles o enrejados que reflejan un comportamiento común. Cuando un objeto hereda de más de una clase se dice que hay herencia múltiple


HISTORIA DE VISUAL FOXPRO





















Los rumores de que Microsoft planea terminar el soporte para FoxPro han sido comunes desde su adquisición del producto, a pesar del hecho de que éste ha tenido el tiempo de vida de soporte más largo para un producto de Microsoft (hasta el 2014). VFP 9 fue lanzado el 17 de diciembre del 2004 y el equipo de Fox luego trabajó en un proyecto cuyo nombre clave fue Sedna. Este fue construido sobre el código base de VFP 9 y consistió principalmente en componentes Xbase que soportaban un número de escenarios interoperables con varias tecnologías de Microsoft, incluyendo SQL Server 2005, .NET, WinFX, Windows Vista y Office 12. Lamentablemente el proyecto no prosperó y fue cancelado por Microsoft.
Microsoft ha publicado un anuncio oficial en su sitio web declarando que no existirán futuras versiones: http://msdn.microsoft.com/en-us/vfoxpro/bb308952.aspx
En las FAQ oficiales sobre el producto, también se puede ver la fecha límite que MS puso al soporte de VFP basada en el ciclo de vida de soporte para sus productos: http://msdn.microsoft.com/en-us/vfoxpro/bb190289
Una empresa llamada tecnología "www.etecnologia.net" ha desarrollado el .NET EXTENDER que permite utilizar el .net framework en Visual FoxPro, y han anunciado que a finales del 2009 van a sacar su "VFP Developer Studio" herramienta que convierte a VFP en un lenguaje .Net. A 31 de mayo del 2009, este producto ya soporta el 92% de los comandos y funciones de VFP y se puede comprar por $250.00.
En la actualidad, a pesar de que Microsoft ha decidido no continuar con Microsoft Visual FoxPro, existe una comunidad de desarrolladores que sigue trabajando en él, PortalFox y Mundo Visual FoxPro son las más importantes entre los desarrolladores de habla hispana.
La gran mayoría de programadores Visual FoxPro se resisten a dejar de programar en este lenguaje porque consideran que es una herramienta muy poderosa, versátil y robusta que les permite crear aplicaciones tan poderosas y hasta más estables que las creadas por otros lenguajes.
CARACTERISTICAS
Visual FoxPro ofrece a los desarrolladores un conjunto de herramientas para crear aplicaciones de bases de datos para el escritorio, entornos cliente/servidor, tablet PC o para la Web.
Entre sus características se pueden enumerar:
§  Capacidades poderosas y muy veloces para el manejo de datos nativos y remotos.
§  Flexibilidad para crear todo tipo de soluciones de bases de datos.
§  Lenguaje de Programación Orientado a objetos.
§  Utilización de Sentencias SQL en forma nativa.
§  Poderoso manejo de vistas, cursores y control completo de estructuras relacionales.
§  Su propio gestor de base de datos incorporado. Sin embargo, también puede conectarse con servidores de base de datos, tales como Oracle, Microsoft SQL Server o MySQL.
§  Cuenta con un motor de generación de informes renovado y muy flexible para soluciones más robustas.
§  Desde la versión 9.0, amplio soporte de XML, tanto como fuente de datos (por ej., servicios Web basados en XML) como por generar reportes en formato XML.
§  Desde la versión 7.0, soporte de la tecnología IntelliSense de Microsoft.

La última versión liberada es la 9.0.
Se planeó inicialmente la salida de una nueva versión llamada 'Sedna', la cual pretendía ser un poderoso y completo lenguaje interactuando aún más con VisualStudio.net, SQLServer2005, SQLExpress2005 y Office12, teniendo a su vez soporte para Windows Vista. Posteriormente se supo que no habrá una próxima versión (Mensaje a la comunidad VFP). Microsoft ha cancelado su desarrollo y lanzó lo que han hecho hasta ahora como add-ons en conjunto con el service pack 2 ambos por el momento en versión Beta (SP2 y "Sedna" - Beta). Igualmente, según las políticas de soporte de Microsoft, éste continuará dando soporte al producto hasta el año 2015.
Hay un movimiento Mas FoxPro que está haciendo presión para que Microsoft continúe o deje el Visual FoxPro como código abierto para que otra gente pueda seguir evolucionándolo.
La versión 9.0 de Visual FoxPro cuenta con el SP1 y el (más reciente) SP2 (en inglés) en los que hay algunas nuevas características y especialmente brindan estabilidad al producto.

LEYES DE MURPHY APLICADAS AL SISTEMA

Si algo puede fallar, fallará".
·         Nada es tan fácil como parece serlo.
·         Todo tiene necesidad de más tiempo del que usted piensa.
·         Si existe la posibilidad de que varias cosas puedan salir mal, saldrá mal aquella que cause el mayor daño.
·         Si usted descubre que existen cuatro maneras posibles en que un procedimiento pueda fracasar, y logra solucionarlas, entonces surgirá inevitable y rápidamente una quinta posibilidad de fallo.
·         Si se dejan al azar las cosas, tenderán a ir de mal en peor.
·         Siempre que se disponga a hacer algo, habrá antes algo más importante que hacer.
·         Cada solución genera nuevos problemas.
·         Es imposible hacer algo a prueba de tontos, porque éstos son muy ingeniosos.
·         La naturaleza siempre se pone de parte del fallo escondido.
·         La madre naturaleza es una malvada.
Leyes para programar un ordenador:
·         Cualquier programa dado, al ejecutarlo se vuelve obsoleto.
·         La realización de cualquier programa dado cuesta más y lleva más tiempo.
·         Si un programa es útil, por algún motivo deberá cambiarlo.
·         Si un programa es inútil, deberá ser documentado.
·         Cualquier programa dado se expandirá para llenar toda la memoria disponible en la computadora.
·         El valor de un programa es proporcional al peso de su información de salida.
·         La complejidad del programa aumenta hasta que excede la capacidad del programador que debe llevarlo a cabo.
Algunos postulados de Troutman sobre programación:
·         Si un editor de entrada ha sido diseñado para rechazar las malas entradas, algún idiota ingenioso descubrirá la forma de que éstas pasen.
·         La maldición es el lenguaje que mejor conocen todos los programadores.
Axioma informático de Leo Beiser:
·         Cuando archive algo en la memoria, acuérdese de dónde lo guardó.
Axiomas informáticos de McCristy:
·         Los archivos de apoyo nunca estarán completos
·         Los fallos del software se pueden corregir sólo cuando la industria considera que se ha quedado obsoleto.
Ley de Lubarsky sobre la entomología cibernética: 
·         Siempre queda algún virus.
Regla de Sutin: 
·         De todas las cosas que se pueden hacer con un ordenador, las más inútiles son las más divertidas.
Ley de Smith sobre reparación de ordenadores: 
·         Los orificios de acceso tendrán medio milímetro menos de diámetro.
Ley de los SIMMs de Protel:
·         Si se deja un ordenador abierto sobre una mesa, los SIMMs de memoria tenderán a desaparecer espontáneamente.
Leyes de Gilb acerca de la falta de fiabilidad:
·         No se puede confiar en las computadoras, pero menos aún en los seres humanos.
·         Cualquier sistema que dependa de la confianza en seres humanos, es poco fiable.
·         Los errores imposibles de descubrir son infinitos en su variedad, en contraste con los detectables que por definición son limitados.
·         Las inversiones para asegurar fiabilidad aumentarán hasta que excedan el coste probable de los errores que puedan presentarse o hasta que alguien insista en hacer algún trabajo útil.
Ley de la falta de fiabilidad: 
·         Errar es humano, pero, para liar las cosas de verdad, hace falta un ordenador.  
·         La ultima versión de SCSI es la Wide Ultra2 SCSI, que usa un bus de 16 bits, un ancho de banda de 80MB/s y trabaja con cables planos de 68 hilos. 
Norma de Steinbach para los sistemas de programación: 
·         No trate nunca de verificar una condición de error que no sepa manejar.
Principio de Pollyanna sobre la IBM: 
·         Las máquinas deben funcionar y las personas, pensar.
Ley de Brook: 
·         Asignar fuerza de trabajo adicional a un proyecto retrasado lo demorará aún más.
Leyes de computación de acuerdo con Golub:
·         Los objetivos de un proyecto, definidos en forma confusa, se utilizan para evitar la molestia de hacer la correspondiente estimación de costos.
·         Un proyecto mal planeado se lleva tres veces el tiempo estimado para terminarse, uno bien planeado tomará solamente el doble.
·         El esfuerzo requerido para corregir el rumbo aumenta geométricamente con el tiempo.
·         Los equipos de trabajo detestan los informes semanales de avance porque en éstos se demuestra en forma evidente la falta de progreso.
Principio de Shaw:
·         Diseñe un sistema que hasta un tonto pueda utilizar, y solamente un tonto lo querrá emplear.
Leyes de Manubay para los programadores:
·         Si funciona la modificación de un programador a un programa ya existente, es probable que no sea lo que quieren los usuarios.
·         Los usuarios no saben realmente lo que quieren, pero saben con certeza lo que no quieren.
Ley de Greer: 
  • ·         Un programa de ordenador hace lo que usted le ordena que haga, no lo que usted quiere que haga. 

LENGUAJE DE MANIPULACIÓN DE DATOS (DML)

Un lenguaje de manipulación de datos (Data Manipulation Language, o DML en inglés) es un lenguaje proporcionado por el sistema de gestión de base de datos que permite a los usuarios llevar a cabo las tareas de consulta o manipulación de los datos, organizados por el modelo de datos adecuado.
El lenguaje de manipulación de datos más popular hoy día es SQL, usado para recuperar y manipular datos en una base de datos relacional.
INSERT

Una sentencia INSERT de SQL agrega uno o más registros a una (y sólo una) tabla en una base de datos relacional.
Forma básica

 INSERT INTO ''tabla'' (''columna1'', [''columna2,... '']) VALUES (''valor1'', [''valor2,...''])
Las cantidades de columnas y valores deben ser iguales. Si una columna no se especifica, le será asignado el valor por omisión. Los valores especificados (o implícitos) por la sentencia INSERT deberán satisfacer todas las restricciones aplicables. Si ocurre un error de sintaxis o si alguna de las restricciones es violada, no se agrega la fila y se devuelve un error.
Ejemplo

 INSERT INTO agenda_telefonica (nombre, numero) VALUES ('Roberto Jeldrez', 4886850);
Cuando se especifican todos los valores de una tabla, se puede utilizar la sentencia acortada:
 INSERT INTO ''tabla'' VALUES (''valor1'', [''valor2,...''])
Ejemplo (asumiendo que 'nombre' y 'número' son las únicas columnas de la tabla 'agenda_telefonica'):
 INSERT INTO agenda_telefonica VALUES ('Roberto Jeldrez', 080473968);

Formas avanzadas

Inserciones
en múltiples filas
Una característica de SQL (desde SQL-92) es el uso de constructores de filas para insertar múltiples filas a la vez, con una sola sentencia SQL:
INSERT INTO ''tabla'' (''columna1'', [''columna2,... '']) 
               VALUES (''valor1a'', [''valor1b,...'']), (''value2a'', [''value2b,...'']),...
Esta característica es soportada por DB2, PostgreSQL (desde la versión 8.2), MySQL, y H2.
Ejemplo (asumiendo que 'nombre' y 'número' son las únicas columnas en la tabla 'agenda_telefonica'):
INSERT INTO agenda_telefonica VALUES ('Roberto Fernández', '4886850'), ('Alejandro Sosa', '4556550');
Que podía haber sido realizado por las sentencias
INSERT INTO agenda_telefonica VALUES ('Roberto Fernández', '4886850');
INSERT INTO agenda_telefonica VALUES ('Alejandro Sosa', '4556550');
Notar que las sentencias separadas pueden tener semántica diferente (especialmente con respecto a los triggers), y puede tener diferente rendimiento que la sentencia de inserción múltiple.
Para insertar varias filas en MS SQL puede utilizar esa construcción:
INSERT INTO phone_book
SELECT 'John Doe', '555-1212'
UNION ALL
SELECT 'Peter Doe', '555-2323';
Tenga en cuenta que no se trata de una sentencia SQL válida de acuerdo con el estándar SQL (SQL: 2003), debido a la cláusula subselect incompleta.
Para hacer lo mismo en Oracle se usa DUAL TABLE, siempre que se trate de solo una simple fila:
INSERT INTO phone_book
SELECT 'John Doe', '555-1212' FROM DUAL
UNION ALL
SELECT 'Peter Doe','555-2323' FROM DUAL
Una implementación conforme al estándar de esta lógica se muestra el siguiente ejemplo, o como se muestra arriba (no aplica en Oracle):
INSERT INTO phone_book
SELECT 'John Doe', '555-1212' FROM LATERAL (VALUES (1)) AS t(c)
UNION ALL
SELECT 'Peter Doe','555-2323' FROM LATERAL (VALUES (1)) AS t(c)

Copia de filas de otras tablas
Un INSERT también puede utilizarse para recuperar datos de otros, modificarla si es necesario e insertarla directamente en la tabla. Todo esto se hace en una sola sentencia SQL que no implica ningún procesamiento intermedio en la aplicación cliente. Un SUBSELECT se utiliza en lugar de la cláusula VALUES. El SUBSELECT puede contener JOIN, llamadas a funciones, y puede incluso consultar en la misma TABLA los datos que se inserta. Lógicamente, el SELECT se evalúa antes que la operación INSERT esté iniciada. Un ejemplo se da a continuación.
INSERT INTO phone_book2
SELECT *
FROM phone_book
WHERE name IN ('John Doe', 'Peter Doe')
Una variación es necesaria cuando algunos de los datos de la tabla fuente se está insertando en la nueva tabla, pero no todo el registro. (O cuando los esquemas de las tablas no son iguales.)
INSERT INTO phone_book2 ([name], [phoneNumber])
SELECT [name], [phoneNumber]
FROM phone_book
WHERE name IN ('John Doe', 'Peter Doe')
El SELECT produce una tabla (temporal), y el esquema de la tabla temporal debe coincidir con el esquema de la tabla donde los datos son insertados.

UPDATE

Una sentencia UPDATE de SQL es utilizada para modificar los valores de un conjunto de registros existentes en una tabla.

Forma básica

 UPDATE ''tabla'' 
SET ''columna1'' = ''valor1'' ,''columna2'' = ''valor2'',...
WHERE ''columnaN = ''valorN''

Ejemplo

UPDATE My_table SET field1 = 'updated value' WHERE field2 = 'N';

DELETE

Una sentencia DELETE de SQL borra uno o más registros existentes en una tabla.
Forma básica

 DELETE FROM ''tabla'' WHERE ''columna1'' = ''valor1''
Ejemplo

DELETE FROM My_table WHERE field2 = 'N';