martes, 13 de abril de 2010

FORMULARIO DE NIVEL SUPERIOR

Un formulario de nivel superior es un formulario independiente y carente de modo, y sirve para crear una aplicación SDI (interfaz de un solo documento, single document interface) o para se utilizado como el primario de otros formularios secundarios. Los formularios de nivel superior trabajan en el mismo nivel que otras aplicaciones de Windows, y pueden aparecer delante o detrás de éstas. Los formularios de nivel superior aparecen en la barra de tareas de Windows. La propiedad Desktop determina el comportamiento de un formulario secundario. Si el propiedad Desktop está establecida en verdadera (.T.) el formulario secundario no estará limitado a los bordes de su formulario primario y podrá desplazarse a cualquier sitio dentro del escritorio de Windows. El formulario secundario no aparece en la barra de tareas de Windows. Con respecto de que abre y cierra tu exe, es porque te falta poner un READ EVENTS es tu código principal, investiga sobre ello.

lunes, 15 de marzo de 2010

TIPOS DE DATOS Y COMANDOS EN VISUALFOXPRO

Tipos de datos y campos
Todos los datos de Visual FoxPro tienen un tipo, como una descripción de los valores permitidos, y el intervalo y tamaño de los valores. Una vez especificado el tipo de datos que está usando, Visual FoxPro puede almacenar y manipular los datos de forma eficaz.
Las variables y las matrices contienen un subconjunto de los tipos de datos disponibles de Visual FoxPro. Los tipos de datos adicionales sólo están disponibles para los campos de la tabla. Para agregar un campo de un tipo específico a una tabla por medio de programación, especifique el tipo de campo con una letra. Para obtener más información, vea la descripción de FieldType en CREATE TABLE - SQL.
Puede especificar el tipo de datos que se almacena en cada campo de una tabla al crear la tabla. El tipo de datos de una variable o un elemento de matriz está determinado por el valor almacenado en la variable o elemento de matriz. La tabla siguiente muestra los tipos de datos de Visual FoxPro.
Tipos de datos de Visual FoxPro
Tipo de datos
Descripción
Tamaño
Intervalo
Character
Cualquier texto
1 byte por carácter hasta 254
Cualquier carácter
Currency
Importes monetarios
8 bytes
- 922337203685477,5807 a 922337203685477,5807
Date
Datos cronológicos formados por mes, año y día
8 bytes
Al usar formatos de fecha estrictos, {^0001-01-01}, 1 de enero, 1 d.C. a {^9999-12-31}, 31 de diciembre, 9999 d.C.
DateTime
Datos cronológicos formados por mes, año, día y hora
8 bytes
Al usar formatos de fecha estrictos, {^0001-01-01}, 1 de enero, 1 d.C. a {^9999-12-31}, 31 de diciembre, 9999 d.C., más 00:00:00 a.m. a 11:59:59 p.m.
Logical
Valor booleano verdadero o falso
1 byte
Verdadero (.T.) o Falso (.F.)
Numeric
Enteros o fracciones
8 bytes en la memoria;1 a 20 bytes en una tabla
- 0,9999999999E+19 a 0,9999999999E+20
Variant
Una variable de tipo Variant puede contener cualquier tipo de datos de Visual FoxPro y el valor Null. Una vez que se almacena un valor en una variable del tipo Variant, ésta asume el tipo de los datos que contiene.
Las variables tipo Variant se designan con el prefijo e en la sintaxis del lenguaje.
Vea el tipo de datos permitidos.
Vea el tipo de datos permitidos.
Además, Visual FoxPro proporciona tipos de datos que se aplican únicamente a campos de tablas.
Tipos de campos de Visual FoxPro
Tipo de campo
Descripción
Tamaño
Intervalo
Double
Número de signo flotante de precisión doble
8 bytes
+/-4,94065645841247E-324 a +/-8,9884656743115E307
Float
Igual que Numeric
8 bytes en la memoria;1 a 20 bytes en una tabla
- 0,9999999999E+19 a 0,9999999999E+20
General
Referencia a un objeto OLE
4 bytes en una tabla
Limitado por la memoria disponible
Integer
Valores enteros
4 bytes
-2147483647 a 2147483647
Memo
Referencia a un bloque de datos
4 bytes en una tabla
Limitado por la memoria disponible
Character (Binario)
Datos de tipo Character que desea mantener sin modificación en las páginas de códigos
1 byte por carácter hasta 254
Cualquier carácter
Memo (Binario)
Datos de campo Memo que desea mantener sin modificación en las páginas de códigos
4 bytes en una tabla
Limitado por la memoria disponible
Sugerencia Puede utilizar la función TYPE( ) para determinar el tipo de datos almacenado en una variable, un elemento de matriz o un campo.
Cada tipo de datos tiene sus propias características, incluido el tamaño de almacenamiento:
Diferencias de almacenamiento de tipos de datos
Para ver una lista de funciones que puede utilizar para cada tipo de datos.

TIPOS DE COMANDOS EN VISUAL FOXPRO

COMANDOS DE VISUAL FOX PRO



Para cambiar de directorio de trabajo:
SET DEFAULT TO ruta de directorio.
Ejemplo: SET DEFAULT TO c:/sistemas/facturación

Limpiar la pantalla principal de Visual Fox Pro:
CLEAR.

Mostrar los archivos del directorio:
DIR
Ejemplos: DIR
DIR*.TXT
DIR C:/MIS DOCUMENTOS/FACTURACIÓN
Para apagar la conexión o platica de VFP:
SET TALK OFF
Esto se hace porque al borrar, crear índices, etc. En la pantalla VFP se va mostrando los resultados, es por eso que un programa se debe incluir.

Para cambiar el formato de la fecha:
SET DATE TO formato
SET DATE TO DMY
SET DATE TO MDY
SET DATE TO BRITISH

Para salir de VFP:
QUIT

Para cancelar la ejecución de un programa:
CANCEL

Para abrir una base de datos:
OPEN DATABASE Nombre de la base de datos.
Ejemplo: OPEN DATABASE facturación

Para Cerrar una Base de Datos:
CLOSE DATABASES

Para abrir una Tabla:
USE Nombre de la tabla.
Ejemplo: USE facturación

Para abrir una base de datos:
OPEN DATABASE Nombre de la base de datos.
Ejemplo: OPEN DATABASE facturación
USE facturación ORDER TAG producto
(Seleccionando el índice al abrir la tabla para no usar set order)

Para cerrar una tabla:
USE


Para cerrar todas las tablas:
CLOSE TABLES

Agregar un registro en blanco:
APPEND BLANK

Eliminar registros:
DELETE
Ejemplo: DELETE (BORRAR ACTUAL)
DELETE ALL (BORRAR TODOS)
DELETE FOR DEPTO=”0132” (BORRAR SOLO LOS DE ESE DEPTO).
DELETE NEXT 5 (BORRAR LOS SIGUIENTES 5 DESPUÉS DEL ACTUAL)

Recuperar registros marcados como borrados:
RECALL
Ejemplo: RECALL (RECUPERAR ACTUAL)
RECALL ALL (RECUPERAR TODOS)
RECALL FOR DEPTO=”0132” (RECUPERAR SOLO LOS DE ESE DEPTO).
RECALL NEXT 5 (RECUPERAR LOS SIGUIENTES 5 DESPUÉS DEL ACTUAL)
Eliminar los registros borrados como marcados:
PACK

Eliminar todos los registros definitivamente (ya no se pueden recobrar):
ZAP

Para ir al ultimo registro de la tabla:
GO TOP

Para ir al ultimo registro de la tabla:
GO BOTTOM

Para ir a un Registro especifico:
GO numero del registro
Ejemplo: GO 10

Para brincar de Registro:
SKIP
Ejemplo: SKIP 1 (Brincar 1 registro hacia delante)
SKIP -1 (Brincar 1 registro hacia atrás)



Para abrir una o varias tablas (Áreas de trabajo):
SELECT
SELECT Área de Trabajo (Número o Letra)
USE TABLA
Ejemplo: SELECT A
USE Facturación
Ejemplo: SELECT B
USE Cliente
O
USE Facturación in A
USE Proveedores in B

Para cambiar de Área de Trabajo:
SELECT
SELECT Área de Trabajo
Ejemplo: SELECT A
Ejemplo: SELECT Clientes

Para establecer el índice de Trabajo:
SET ORDER TO Nombre de Índice
Ejemplo: SET ORDER TO nombre
USE Facturación
Ejemplo: Para no utilizar ningún índice de Trabajo:
SET ORDER TO

Para establecer Filtros de Condición:
SET FILTER TO Condición del Filtro
Ejemplos: SET FILTER TO sueldo > 1000
SET FILTER TO sueldo >= 1000 . and. sueldo <= 3000
SET FILTER TO sueldo = 1000 . or. sueldo = 2000
SET FILTER TO depto < > “0004” . and. (sueldo = 1000 .or. sueldo = 2000)
Primero se evalúan las que están en paréntesis y después las que están fuera.

Para buscar información sin índice activo:
LOCATE FOR Condición de búsqueda
Ejemplos: LOCATE FOR numero_empleado = “09499”

Para buscar información con un índice activo:
SEEK Información a buscar (variable, numero o cadena de texto)
Ejemplos: SEEK “09499”
SEEK num_empleado
SEEK 1235
Para esto ha de haber un índice activo con SET ORDER TO o haber abierto la tabla con la opción ORDER TAG nombre del índice.



Examinar la información:
BROWSE
Ejemplos: USE empleado
BROWSE
0
BROWSE FIELDS clave, nombre, sueldo (aquí se omitió el depto)
0
BROWSE FOR depto = “0003” (solo ese depto)
Aquí se pueden utilizar una mezcla de todas.

Listar registros en Pantalla:
LIST [Campos] (opcional)
Ejemplos: LIST (Lista todos los campos en pantalla)
LIST clave, nombre, sueldo (Lista solo esos Campos)
LIST FOR depto = “0012” (Lista solo de ese depto)
LIST OFF (Listar sin el numero de registro)
Aquí se pueden utilizar una mezcla de todas, la única desventaja es que si son demasiados registro, y se despliegan todos, y recorre los primeros registros hacia arriba y ya no se pueden ver.

Listar registros hacia la impresora:
Igual que la anterior solo que al final de la instrucción se le agrega TO PRINT
Ejemplos: LIST clave, nombre, sueldo TO PRINT

Desplegar registros en Pantalla:
Para esto solo sustituye la instrucción LIST por DISPLAY
Con esto se tiene la ventaja de que cuando se llama la pantalla de registros, el VFP hace una pausa para que los puedas leer y después continuar.

Modificar la estructura de una tabla:
MODIFY STRUC

Desplegar en Pantalla o Impresora la Estructura de una Tabla:
DISPLAY STRUCT
O
DISPLAY STRUCT TO PRINT

PROCEDIMIENTOS ALMACENADOS

Un procedimiento almacenado (stored procedure en inglés) es un programa (o procedimiento) el cual es almacenado físicamente en una base de datos. Su implementación varía de un manejador de bases de datos a otro. La ventaja de un procedimiento almacenado es que al ser ejecutado, en respuesta a una petición de usuario, es ejecutado directamente en el motor de bases de datos, el cual usualmente corre en un servidor separado. Como tal, posee acceso directo a los datos que necesita manipular y sólo necesita enviar sus resultados de regreso al usuario, deshaciéndose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes.
Usos típicos para procedimientos almacenados incluyen la validación de datos siendo integrados a la estructura de base de datos (los procedimientos almacenados utilizados para este propósito a menudo son llamados disparadores; triggers en inglés), o encapsular un proceso grande y complejo. El último ejemplo generalmente ejecutará más rápido como un procedimiento almacenado que de haber sido implementado como, por ejemplo, un programa corriendo en el sistema cliente y comunicándose con la base de datos mediante el envío de consultas SQL y recibiendo sus resultados.
Los procedimientos pueden ser ventajosos: Cuando una base de datos es manipulada desde muchos programas externos. Al incluir la lógica de la aplicación en la base de datos utilizando procedimientos almacenados, la necesidad de embeber la misma lógica en todos los programas que acceden a los datos es reducida. Esto puede simplificar la creación y, particularmente, el mantenimiento de los programas involucrados.
Podemos ver un claro ejemplo de estos procedimientos cuando requerimos realizar una misma operación en un servidor dentro de algunas o todas las bases de datos y a la vez dentro de todas o algunas de las tablas de las bases de datos del mismo. Para ello podemos utilizar a los Procedimientos almacenados auto creables que es una forma de generar ciclos redundantes a través de los procedimientos almacenados.
Implementación:
Estos procedimientos, se usan a menudo, pero no siempre, para realizar consultas SQL sobre los objetos del banco de datos de una manera abstracta, desde el punto de vista del cliente de la aplicación. Un procedimiento almacenado permite agrupar en forma exclusiva parte de algo específico que se desee realizar o, mejor dicho, el SQL apropiado para dicha acción.
Usos:
Los usos 'típicos' de los procedimientos almacenados se aplican en la validación de datos, integrados dentro de la estructura del banco de datos. Los procedimientos almacenados usados con tal propósito se llaman comúnmente disparadores, o triggers. Otro uso común es la 'encapsulación' de un API para un proceso complejo o grande que podría requerir la 'ejecución' de varias consultas SQL, tales como la manipulación de un 'dataset' enorme para producir un resultado resumido.
También pueden ser usados para el control de gestión de operaciones, y ejecutar procedimientos almacenados dentro de una transacción de tal manera que las transacciones sean efectivamente transparentes para ellos.
Ventajas:
La ventaja de un procedimiento almacenado, en respuesta a una petición de usuario, está directamente bajo el control del motor del manejador de bases de datos, lo cual corre generalmente en un servidor separado de manejador de bases de datos aumentando con ello, la rapidez de procesamiento de requerimientos del manejador de bases de datos. El servidor de la base de datos tiene acceso directo a los datos necesarios para manipular y sólo necesita enviar el resultado final al usuario. Los procedimientos almacenados pueden permitir que la lógica del negocio se encuentre como un API en la base de datos, que pueden simplificar la gestión de datos y reducir la necesidad de codificar la lógica en el resto de los programas cliente. Esto puede reducir la probabilidad de que los datos sean corrompidos por el uso de programas clientes defectuosos o erróneos. De este modo, el motor de base de datos puede asegurar la integridad de los datos y la consistencia, con la ayuda de procedimientos almacenados. Algunos afirman que las bases de datos deben ser utilizadas para el almacenamiento de datos solamente, y que la lógica de negocio sólo debería ser aplicada en la capa de negocio de código, a través de aplicaciones cliente que deban acceder a los datos. Sin embargo, el uso de procedimientos almacenados no se opone a la utilización de una capa de negocio.
Procedimientos almacenados en MySQL:
Desde MySQL 5 los procedimientos almacenados empezaron a ser soportados, como suele suceder en MySQL las sentencias se ejecutan luego de escribir el signo punto y coma (;), por esta razón antes de escribir el procedimiento almacenado la función del punto y coma se asigna a otros caracteres usando la sentencia DELIMITER seguida de un caracter tal como , de esta manera el procedimiento puede ser escrito usando los punto y comas sin que se ejecute mientras se escribe; después de escrito el procedimiento, se escibe nuevamente la sentencia DELIMITER ; para asignar al punto y coma su función habitual.
El siguiente es un ejemplo de procedimiento almacenado en MySQL:
DELIMITER

CREATE PROCEDURE autos(IN velocidad int,IN marca varchar(50))
BEGIN
IF velocidad < 120 then
INSERT INTO familiares VALUES(velocidad,marca);
ELSE
INSERT INTO deportivos VALUES(velocidad,marca);
END IF;
END;

jueves, 11 de marzo de 2010

TODO SOBRE EL COMANDO SET

COMANDO SET:
Muestra, establece o quita las variables de entorno de cmd.exe.SET [variable=[cadena]] variable Especifica el nombre de la variable de entorno. cadena Especifica una serie de caracteres que se asignará a la variable.Escriba SET sin parámetros para ver las variables de entorno actuales.Si las extensiones de comando están habilitadas, SET cambia así:"Cuando se llama al comando SET solamente con un nombre de variable, sin signo de igual ni valor, se mostrarán los valores de todas las variables cuyos prefijos coincidan con el nombre especificado como parámetro para el comando SET. Por ejemplo: SET Pmostrará todas las variables que empiecen con la letra 'P'El comando SET establecerá ERRORLEVEL en 1 si no se encuentra el nombre de la variable en el entorno actual.El comando SET no permitirá que un signo de igual sea parte de una variable.Se han agregado dos modificadores nuevos al comando SET: SET /A expression SET /P variable=[promptString]El modificador /A especifica que la cadena a la derecha del signo de iguales una expresión numérica que es evaluada. El evaluador de expresiones esbastante simple y es compatible con las siguientes operaciones, en orden deprecedencia decreciente: () - agrupar ! ~ - - operadores unarios * / % - operadores aritméticos + - - operadores aritméticos << >> - desplazamiento lógico & - bit a bit y ^ - bit a bit exclusivo o - bit a bit = *= /= %= += -= - asignación &= ^= = <<= >>= , - separador de expresiónSi se utiliza cualquiera de los operadores lógicos o de módulo, seránecesario escribir la cadena entre comillas. Cualquier cadena de la expresión que no sea numérica, se tratará como variable de entorno cuyo valor se convertirá a tipo numérico antes de utilizarse. Si se especifica una variable que no está definida en el entorno actual, se utilizará el valor cero. Esto permite hacer operaciones aritméticas con los valores de variables de entorno evitando el escribir todos estos signos % para obtener sus valores. Si se ejecuta el comando SET /A desde la línea del comando fuera de la secuencia decomandos, entonces se mostrará el valor final de la expresión. El operadorde asignación requiere un nombre de variable de entorno a la izquierda del operador de asignación. Los valores numéricos son números decimales, a no ser que lleven el prefijo 0x delante para los números hexadecimales, y 0 para los números octales. De esta manera 0x12 es lo mismo que 18, y lo mismo que 022. Nota: la notación octal puede ser confusa: 08 y 09 no son números válidos porque 8 y 9 no son dígitos octales válidos.El modificador /P permite establecer el valor de una variable para una líneade entrada escrita por el usuario. Muestra la cadena del símbolo del sistemaantes de leer la línea de entrada. La cadena del símbolo del sistema puedeestar vacía.La sustitución de variables de entorno ha sido mejorada así: %PATH:str1=str2%expandirá la variable de entorno PATH, sustituyendo cada repetición de"str1" en el resultado expandido con "str2". "str2" puede ser la cadenavacía para borrar efectivamente todas las repeticiones de "str1" de lasalida expandida. "str1" puede empezar con un asterisco, en cuyo caso,coincidirá con lo contenido en la salida expandida desde su inicio, hastala primera aparición del fragmento de str1 que queda.También puede especificar subcadenas para una expansión. %PATH:~10,5%expandirá la variable de entorno PATH, y usará sólo los 5 caracteresa partir del décimo primer carácter (desplazamiento 10) del resultadoexpandido. Si la longitud no se especifica, se utilizará el resto delvalor de la variable. Si algún número (desplazamiento o longitud) esnegativo, entonces el número usado es la longitud del valor de la variablede entorno añadido al desplazamiento o longitud especificados. %PATH:~-10%extraerá los 10 caracteres de la variable PATH. %PATH:~0,-2%extraerá todo menos los 2 últimos caracteres de la variable PATH.Finalmente, se ha añadido compatibilidad para la expansión de la variableretardada. Este soporte está siempre deshabilitado de forma predeterminada, pero puedehabilitarse o deshabilitarse a través del modificador de línea de comandos/V a CMD.EXE. Ver CMD /?La expansión de la variable de entorno es útil para tratar con laslimitaciones de la expansión actual, las cuales ocurren cuando una línea detexto es leída, y no cuando se ejecuta. El siguiente ejemplo demuestra elproblema con la expansión de la variable inmediata: set VAR=antes if "%VAR%" == "antes" ( set VAR=después if "%VAR%" == "después" @echo Si esto se puede ver, entonces significa que funcionó )dado que %VAR% se sustituye al mismo tiempo en ambas instrucciones IF cuando se lee la primera instrucción IF, pues incluye lógicamente al cuerpo del IF, el cual es una instrucción compuesta. De esta manera, IF, dentro de la instrucción compuesta está realmente comparando "antes" con "después" lo cuál nunca será igual. De un modo parecido, el siguiente ejemplo no funcionará como se espera: set LIST= for %i in (*) do set LIST=%LIST% %i echo %LIST%en esto NO generará una lista de archivos en el directorio actual, pero ensu lugar establecerá la variable LIST en el último archivo encontrado. Denuevo, esto ocurre porque %LIST% es expandido sólo una vez cuando laopción FOR es leída, y en ese momento la variable LIST variable está vacía.Así el ciclo actual FOR que se está ejecutando es: for %i in (*) do set LIST= %iel cual sólo mantiene el valor LIST hasta el último archivo encontrado.La expansión de la variable de entorno retardada permite utilizar uncarácter diferente (el signo de exclamación para expandir variables entiempo de ejecución. Si la expansión de la variable retardada estáhabilitada, los ejemplos se pueden escribir de la siguiente manera para que funcionen como es necesario: set VAR=antes if "%VAR%" == "antes" ( set VAR=después if "!VAR!" == "después" @echo Si esto se puede ver, entonces significa que funcionó ) set LIST= for %i en (*) do set LIST=!LIST! %i echo %LIST%Si las extensiones de comando están habilitadas, hay varias variablesdinámicas de entorno que pueden ser expandidas pero que no semuestran en la lista de variables que muestra ESTABLECER. Estos valores devariable se calculan dinámicamente cada vez que el valor de lavariable se expande.Si el usuario define una variable explícitamente con uno de estos nombres,entonces esa definición suplantará la variable dinámica abajo descrita:%CD% - se expande a la cadena del directorio actual .%DATE% - se expande a la fecha actual usando el mismo formato que el comando DATE.%TIME% - se expande a la hora actual usando el mismo formato que el comando TIME. %RANDOM% - se expande a un número decimal aleatorio entre 0 y 32767.%ERRORLEVEL% - se expande al valor de NIVEL DE ERROR actual%CMDEXTVERSION% - se expande al número actual de versión de las extensiones del comando del procesador.%CMDCMDLINE% - se expande a la línea de comando original que invocó el Procesador de comandos.C:\WINDOWS>HELP SETLOCALComienza la sección de cambios locales de entorno en un archivo por lotes. Los cambios de entornohechos después de que se haya emitido SETLOCAL son locales en el archivo por lotes.ENDLOCAL debe ser emitido para restaurar la configuración anterior. Cuando se llega al final deun archivo de secuencias de comandos por lotes, se ejecuta un ENDLOCAL implícito para cualquier comando SETLOCAL pendiente que se haya emitido para este archivo de secuencias de comandos por lotes.SETLOCALSi las extensiones de comandos están habilitadas SETLOCAL cambia así:Ahora el comando del archivo por lotes SETLOCAL acepta argumentos opcionales: ENABLEEXTENSIONS / DISABLEEXTENSIONSHabilitar o deshabilitar las extensiones del procesador de comandos. Ver CMD /? para más detallesENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION Habilita o deshabilita la expansión de la variable de entorno retardada. Ver SET /? para más detalles. Estas modificaciones duran hasta que coincida el comando ENDLOCAL, independientemente de su configuración anterior para el comando SETLOCAL.El comando SETLOCAL establecerá el valor ERRORLEVEL si se diera un argumento. Será cero si se da uno de los dos argumentos válidos y el otro no. Puede usar esto en los archivos de proceso por lotes para determinar si las extensiones están disponibles usando la siguiente técnica: VERIFY OTHER 2>null SETLOCAL ENABLEEXTENSIONS IF ERRORLEVEL 1 echo No puede activar las extensionesEsto funciona porque en las versiones anteriores de CMD.EXE, SETLOCAL no establecía el valor de ERRORLEVEL. El comando VERIFY con un argumento erróneo inicializa el valor ERRORLEVEL a un valor distinto de cero.C:\WINDOWS>HELP SHIFTCambia la posición de parámetros reemplazables en un archivo por lotes.SHIFT [/n]Si las extensiones de comando están habilitadas, el comando SHIFTadmitirá el modificador /n, el cual informa al comando que empiece acambiar en el argumento n, en donde n puede estar comprendido entre 0 y 8.Por ejemplo: SHIFT /2cambiará %3 a %2, %4 a %3, etc. y deja %0 y %1 sin modificar.

miércoles, 24 de febrero de 2010

QUE ES CURSOR ADAPTER Y LENGUAJE SQL

Que es cursor adapter
Como se aplica y beneficios que tiene

El CursorAdapter no es más que una nueva clase, pero muy importante, ya que con ella se puede gestionar todo acceso a datos, tanto local como remoto, el cursorAdapter soporta diferentes orígenes de datos, los cuales pueden ser aplicados dinámicamente y la compartición de dichos orígenes de datos solamente se encontrará limitada por la propia tecnología. El cursorAdapter soporta los siguientes orígenes de datos: Nativo (Visual FoxPro) Open Data Connectivity (ODBC) ActiveX Data Object (ADO) Extensible Markup Lenguaje (XML) Debemos entender, a esta nueva clase como un punto de entrada, ya que como todo tiene sus deficiencias, pero por ello, no deja de ser noble en su propio concepto y mantener su grandeza para el desarrollo. Si sabemos darle este enfoque, se puede obtener unos resultados majestuosos en la capa de acceso a datos, ya sea para aplicaciones cliente/servidor, posibilidades de movernos en multitud de bases de datos, etc. Y todo esto interrelacionado; con que a partir de esta versión podemos crear clases partiendo del contenedor DataEnvironment, se pueden crear verdaderos sistemas, con versatilidad, robustez y potencia en lo que a la capa de acceso a datos se refiere. Otra de las grandes ventajas que ofrece el CursorAdapter es que mantiene la interacción con los comandos TableUpdate y TableRevert, esto es realmente muy bueno, ya que no perdemos la generosidad y dimensión de dichos comandos, sobre todo cuando queremos dar robustez a la integridad de nuestros datos e independientemente del origen de datos.

El lenguaje de consulta estructurado (SQL): es un lenguaje de base de datos normalizado, utilizado por los diferentes motores de bases de datos para realizar determinadas operaciones sobre los datos o sobre la estructura de los mismos. Pero como sucede con cualquier sistema de normalización hay excepciones para casi todo; de hecho, cada motor de bases de datos tiene sus peculiaridades y lo hace diferente de otro motor, por lo tanto, el lenguaje SQL normalizado (ANSI) no nos servirá para resolver todos los problemas, aunque si se puede asegurar que cualquier sentencia escrita en ANSI será interpretable por cualquier motor de datos.
Breve Historia
La historia de SQL: (que se pronuncia deletreando en inglés las letras que lo componen, es decir "ese-cu-ele" y no "siquel" como se oye a menudo) empieza en 1974 con la definición, por parte de Donald Chamberlin y de otras personas que trabajaban en los laboratorios de investigación de IBM, de un lenguaje para la especificación de las características de las bases de datos que adoptaban el modelo relacional. Este lenguaje se llamaba SEQUEL (Structured English Query Language) y se implementó en un prototipo llamado SEQUEL-XRM entre 1974 y 1975. Las experimentaciones con ese prototipo condujeron, entre 1976 y 1977, a una revisión del lenguaje (SEQUEL/2), que a partir de ese momento cambió de nombre por motivos legales, convirtiéndose en SQL. El prototipo (System R), basado en este lenguaje, se adoptó y utilizó internamente en IBM y lo adoptaron algunos de sus clientes elegidos. Gracias al éxito de este sistema, que no estaba todavía comercializado, también otras compañías empezaron a desarrollar sus productos relacionales basados en SQL. A partir de 1981, IBM comenzó a entregar sus productos relacionales y en 1983 empezó a vender DB2. En el curso de los años ochenta, numerosas compañías (por ejemplo Oracle y Sybase, sólo por citar algunos) comercializaron productos basados en SQL, que se convierte en el estándar industrial de hecho por lo que respecta a las bases de datos relacionales.
En 1986, el ANSI adoptó SQL (sustancialmente adoptó el dialecto SQL de IBM) como estándar para los lenguajes relacionales y en 1987 se transfomó en estándar ISO. Esta versión del estándar va con el nombre de SQL/86. En los años siguientes, éste ha sufrido diversas revisiones que han conducido primero a la versión SQL/89 y, posteriormente, a la actual SQL/92.
El hecho de tener un estándar definido por un lenguaje para bases de datos relacionales abre potencialmente el camino a la intercomunicabilidad entre todos los productos que se basan en él. Desde el punto de vista práctico, por desgracia las cosas fueron de otro modo. Efectivamente, en general cada productor adopta e implementa en la propia base de datos sólo el corazón del lenguaje SQL (el así llamado Entry level o al máximo el Intermediate level), extendiéndolo de manera individual según la propia visión que cada cual tenga del mundo de las bases de datos.
Actualmente, está en marcha un proceso de revisión del lenguaje por parte de los comités ANSI e ISO, que debería terminar en la definición de lo que en este momento se conoce como SQL3. Las características principales de esta nueva encarnación de SQL deberían ser su transformación en un lenguaje stand-alone (mientras ahora se usa como lenguaje hospedado en otros lenguajes) y la introducción de nuevos tipos de datos más complejos que permitan, por ejemplo, el tratamiento de datos multimediales.
Componentes del SQL
El lenguaje SQL está compuesto por comandos, cláusulas, operadores y funciones de agregado. Estos elementos se combinan en las instrucciones para crear, actualizar y manipular las bases de datos.
Comandos
Existen dos tipos de comandos SQL:
o DLL que permiten crear y definir nuevas bases de datos, campos e índices.
o DML que permiten generar consultas para ordenar, filtrar y extraer datos de la base de datos.
Comandos DLL
Comando
Descripción
CREATE
Utilizado para crear nuevas tablas, campos e índices
DROP
Empleado para eliminar tablas e índices
ALTER
Utilizado para modificar las tablas agregando campos o cambiando la definición de los campos.
Comandos DML
Comando
Descripción
SELECT
Utilizado para consultar registros de la base de datos que satisfagan un criterio determinado
INSERT
Utilizado para cargar lotes de datos en la base de datos en una única operación.
UPDATE
Utilizado para modificar los valores de los campos y registros especificados
DELETE
Utilizado para eliminar registros de una tabla de una base de datos
Cláusulas
Las cláusulas son condiciones de modificación utilizadas para definir los datos que desea seleccionar o manipular.
Cláusula
Descripción
FROM
Utilizada para especificar la tabla de la cual se van a seleccionar los registros
WHERE
Utilizada para especificar las condiciones que deben reunir los registros que se van a seleccionar
GROUP BY
Utilizada para separar los registros seleccionados en grupos específicos
HAVING
Utilizada para expresar la condición que debe satisfacer cada grupo
ORDER BY
Utilizada para ordenar los registros seleccionados de acuerdo con un orden específico
Operadores Lógicos
Operador
Uso
AND
Es el "y" lógico. Evalúa dos condiciones y devuelve un valor de verdad sólo si ambas son ciertas.
OR
Es el "o" lógico. Evalúa dos condiciones y devuelve un valor de verdad si alguna de las dos es cierta.
NOT
Negación lógica. Devuelve el valor contrario de la expresión.
Operadores de Comparación
Operador
Uso
<
Menor que
>
Mayor que
<>
Distinto de
<=
Menor o igual que
>=
Mayor o igual que
=
Igual que
BETWEEN
Utilizado para especificar un intervalo de valores.
LIKE
Utilizado en la comparación de un modelo
In
Utilizado para especificar registros de una base de datos
Funciones de Agregado
Las funciones de agregado se usan dentro de una cláusula SELECT en grupos de registros para devolver un único valor que se aplica a un grupo de registros.
Funciónn
Descripción
AVG
Utilizada para calcular el promedio de los valores de un campo determinado
COUNT
Utilizada para devolver el número de registros de la selección
SUM
Utilizada para devolver la suma de todos los valores de un campo determinado
MAX
Utilizada para devolver el valor más alto de un campo especificado
MIN
Utilizada para devolver el valor más bajo de un campo especificado
Orden de ejecución de los comandos
Dada una sentencia SQL de selección que incluye todas las posibles cláusulas, el orden de ejecución de las mismas es el siguiente:
1. Cláusula FROM
2. Cláusula WHERE
3. Cláusula GROUP BY
4. Cláusula HAVING
5. Cláusula SELECT
6. Cláusula ORDER BY

domingo, 21 de febrero de 2010

bases de datos en foxpro

Definición de Base de datos(database). Almacén de datos relacionados con diferentes modos de organización. Una base de datos representa algunos aspectos del mundo real, aquellos que le interesan al diseñador. Se diseña y almacena datos con un propósito específico. Con la palabra "datos" se hace referencia a hechos conocidos que pueden registrarse, como ser números telefónicos, direcciones, nombres, etc.Las bases de datos almacenan datos, permitiendo manipularlos fácilmente y mostrarlos de diversas formas.El proceso de construir una base de datos es llamado diseño de base de datos.
Gestión de bases de datosUna base de datos puede mantenerse manualmente o ser informatizada (esta última es la que nos interesa). La base de datos informatizada es creada y mantenida por un conjunto de aplicaciones diseñadas para esas tareas específicamente o bien, se puede gestionar empleando un SGBD.Los SGBD son un conjunto de programas encargados de definir, construir y manipular una base de datos, y mantener su integridad y redundancias.* Definir una base de datos: consiste en especificar los tipos de datos, estructuras y restricciones para los datos que se almacenarán.* Construir una base de datos: es el proceso de almacenar los datos sobre algún medio de almacenamiento.* Manipular una base de datos: incluye funciones como consulta, actualización, etc. de bases de datos.Manipulación de bases de datosEl lenguaje de consulta más habitual para las bases de datos online es el SQL. Ver consulta en base de datos. Algunas bases de datos populares son MS Access, dBase, FoxPro, Paradox, Approach, Oracle y Open Office Base.Las bases de datos contienen tablas, cada tabla tiene registros que su vez contienen campos.Aplicaciones tradicionales de base de datosEn la actualidad estamos empleando bases de datos continuamente, muchas veces sin notarlo. Por ejemplo, al retirar o ingresar dinero en un cajero automático, reservar un vuelo aéreo, al suscribirse a algún servicio, o si consultamos un catálogo de libros de una biblioteca, o al buscar en un buscador de internet, etc. En todos estos casos, se están empleando bases de datos informatizadas.Actores sobre bases de datosLos actores o personas relacionadas a las bases de datos son:* Administrador de bases de datos (ABD).* Diseñador de bases de datos.* Usuario final: es aquella persona cuyo trabajo requiere acceder a la base de datos ya sea para consultarla, actualizarla y/o generar informes.* Analista de sistemas y programador de aplicaciones.Almacenamiento de las bases de datos(ver almacenamiento de bases de datos)Las bases de datos son conceptuales, describen diferentes entidades con sus atributos y relaciones. Pero básicamente las bases de datos terminan almacenándose en forma de archivos, generalmente en discos magnéticos.

jueves, 11 de febrero de 2010

taller de investigacion sobre (p.o.o)

La programación Orientada a objetos (POO):
es una forma especial de programar, más cercana a como expresaríamos las cosas en la vida real que otros tipos de programación. Con la POO tenemos que aprender a pensar las cosas de una manera distinta, para escribir nuestros programas en términos de objetos, propiedades, métodos y otras cosas que veremos rápidamente para aclarar conceptos y dar una pequeña base que permita soltarnos un poco con este tipo de programación.
Motivación
Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvían una y otra vez los mismos problemas. Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creó la POO. Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo, de manera que consigamos que el código se pueda reutilizar.
La POO no es difícil, pero es una manera especial de pensar, a veces subjetiva de quien la programa, de manera que la forma de hacer las cosas puede ser diferente según el programador. Aunque podamos hacer los programas de formas distintas, no todas ellas son correctas, lo difícil no es programar orientado a objetos sino programar bien. Programar bien es importante porque así nos podemos aprovechar de todas las ventajas de la POO.
Cómo se piensa en objetos
Pensar en términos de objetos es muy parecido a cómo lo haríamos en la vida real. Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO. Diríamos que el coche es el elemento principal que tiene una serie de características, como podrían ser el color, el modelo o la marca. Además tiene una serie de funcionalidades asociadas, como pueden ser ponerse en marcha, parar o aparcar.
Pues en un esquema POO el coche sería el objeto, las propiedades serían las características como el color o el modelo y los métodos serían las funcionalidades asociadas como ponerse en marcha o parar.
Por poner otro ejemplo vamos a ver cómo modelizaríamos en un esquema POO una fracción, es decir, esa estructura matemática que tiene un numerador y un denominador que divide al numerador, por ejemplo 3/2.
La fracción será el objeto y tendrá dos propiedades, el numerador y el denominador. Luego podría tener varios métodos como simplificarse, sumarse con otra fracción o número, restarse con otra fracción, etc.
Estos objetos se podrán utilizar en los programas, por ejemplo en un programa de matemáticas harás uso de objetos fracción y en un programa que gestione un taller de coches utilizarás objetos coche. Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos también son objetos. Es decir, el taller de coches será un objeto que utilizará objetos coche, herramienta, mecánico, recambios, etc.
Clases en POO
Las clases :son declaraciones de objetos, también se podrían definir como abstracciones de objetos. Esto quiere decir que la definición de un objeto es la clase. Cuando programamos un objeto y definimos sus características y funcionalidades en realidad lo que estamos haciendo es programar una clase. En los ejemplos anteriores en realidad hablábamos de las clases coche o fracción porque sólo estuvimos definiendo, aunque por encima, sus formas.
Propiedades en clases
Las propiedades o atributos: son las características de los objetos. Cuando definimos una propiedad normalmente especificamos su nombre y su tipo. Nos podemos hacer a la idea de que las propiedades son algo así como variables donde almacenamos datos relacionados con los objetos.
Métodos en las clases :
Son las funcionalidades asociadas a los objetos. Cuando estamos programando las clases las llamamos métodos. Los métodos son como funciones que están asociadas a un objeto.
Objetos en POO
Los objetos son ejemplares de una clase cualquiera. Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se creará. Esta acción de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traducción de la palabra instace que en inglés significa ejemplar). Por ejemplo, un objeto de la clase fracción es por ejemplo 3/5. El concepto o definición de fracción sería la clase, pero cuando ya estamos hablando de una fracción en concreto 4/7, 8/1000 o cualquier otra, la llamamos objeto.
Para crear un objeto se tiene que escribir una instrucción especial que puede ser distinta dependiendo el lenguaje de programación que se emplee, pero será algo parecido a esto.
miCoche = new Coche() programacion orientada a objetos (p.o.o)Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuación. Dentro de los paréntesis podríamos colocar parámetros con los que inicializar el objeto de la clase coche.
Estados en objetos
Cuando tenemos un objeto sus propiedades toman valores. Por ejemplo, cuando tenemos un coche la propiedad color tomará un valor en concreto, como por ejemplo rojo o gris metalizado. El valor concreto de una propiedad de un objeto se llama estado.
Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto.
miCoche.color = rojo
El objeto es miCoche, luego colocamos el operador punto y por último el nombre e la propiedad a la que deseamos acceder. En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignación.
Mensajes en objetos
Un mensaje en un objeto es la acción de efectuar una llamada a un método. Por ejemplo, cuando le decimos a un objeto coche que se ponga en marcha estamos pasándole el mensaje “ponte en marcha”.
Para mandar mensajes a los objetos utilizamos el operador punto, seguido del método que deseamos invocar.
miCoche.ponerseEnMarcha()
En este ejemplo pasamos el mensaje ponerseEnMarcha(). Hay que colocar paréntesis igual que cualquier llamada a una función, dentro irían los parámetros.
Otras cosas
Hay mucho todavía que conocer de la POO ya que sólo hemos hecho referencia a las cosas más básicas. También existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades más potentes de la POO.
La herencia: sirve para crear objetos que incorporen propiedades y métodos de otros objetos. Así podremos construir unos objetos a partir de otros sin tener que reescribirlo todo.
El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando, y abstraernos para definir un código que sea compatible con objetos de varios tipos.
Son conceptos avanzados que cuesta explicar en las líneas de ese informe. No hay que olvidar que existen libros enteros dedicados a la POO y aquí solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengáis que poneros delante de ellas en los lenguajes de programación que debe conocer un desarrollador del web.
El concepto de programación orientada a objetos (OOP) no es nuevo, lenguajes clásicos como SmallTalk se basan en ella. Dado que la OOP. se basa en la idea natural de la existencia de un mundo lleno de objetos y que la resolución del problema se realiza en términos de objetos, un lenguaje se dice que está basado en objetos si soporta objetos como una característica fundamental del mismo.
El elemento fundamental de la OOP es, como su nombre lo indica, el objeto. Podemos definir un objeto como un conjunto complejo de datos y programas que poseen estructura y forman parte de una organización.
Esta definición especifica varias propiedades importantes de los objetos. En primer lugar, un objeto no es un dato simple, sino que contiene en su interior cierto número de componentes bién estructurados. En segundo lugar, cada objeto no es un ente aislado, sino que forma parte de una organización jerárquica o de otro tipo.
ESTRUCTURA DE UN OBJETO
Un objeto puede considerarse como una especie de cápsula dividida en tres partes:
1 - RELACIONES
2 - PROPIEDADES
3 - METODOS
Cada uno de estos componentes desempeña un papel totalmente independiente:
Las relaciones permiten que el objeto se insterte en la organización y están formadas esencialmente por punteros a otros objetos.
Las propiedades: distinguen un objeto determinado de los restantes que forman parte de la misma organización y tiene valores que dependen de la propiedad de que se trate. Las propiedades de un objeto pueden ser heredadas a sus descendientes en la organización.
Los métodos son las operaciones que pueden realizarse sobre el objeto, que normalmente estarán incorporados en forma de programas (código) que el objeto es capaz de ejecutar y que también pone a disposición de sus descendientes a través de la herencia.
Encapsulamiento y ocultación
Como hemos visto, cada objeto es una estructura compleja en cuyo interior hay datos y programas, todos ellos relacionados entre sí, como si estuvieran encerrados conjuntamente en una cápsula. Esta propiedad (encapsulamiento), es una de las características fundamentales en la OOP.
Los objetos son inaccesibles, e impiden que otros objetos, los usuarios, o incluso los programadores conozcan cómo está distribuída la información o qué información hay disponible. Esta propiedad de los objetos se denomina ocultación de la información.
Esto no quiere decir, sin embargo, que sea imposible conocer lo necesario respecto a un objeto y a lo que contiene. Si así fuera no se podría hacer gran cosa con él. Lo que sucede es que las peticiones de información a un objeto. deben realizarse a través de mensajes dirigidos a él, con la orden de realizar la operación pertinente. La respuesta a estas ordenes será la información requerida, siempre que el objeto considere que quien envía el mensaje está autorizado para obtenerla.
El hecho de que cada objeto sea una cápsula facilita enormemente que un objeto determinado pueda ser transportado a otro punto de la organización, o incluso a otra organización totalmente diferente que precise de él. Si el objeto ha sido bien construído, sus métodos seguirán funcionando en el nuevo entorno sin problemas. Esta cualidad hace que la OOP sea muy apta para la reutilización de programas.
Organización de los objetos
En principio, los objetos forman siempre una organización jerárquica, en el sentido de que ciertos objetos son superiores a otros de cierto modo.
Existen varios tipos tipos de jerarquías: serán simples cuando su estructura pueda ser representada por medio de un "arbol". En otros casos puede ser más compleja.
En cualquier caso, sea la estructura simple o compleja, podrán distinguirse en ella tres niveles de objetos.
-La raíz de la jerarquía. Se trata de un objeto único y especial. Este se caracteríza por estar en el nivel más alto de la estructura y suele recibir un nombre muy genérico, que indica su categoría especial, como por ejemplo objeto madre, Raíz o Entidad.
-Los objetos intermedios. Son aquellos que descienden directamente de la raíz y que a su vez tienen descendientes. Representan conjuntos o clases de objetos, que pueden ser muy generales o muy especializados, según la aplicación. Normalmente reciben nombres genéricos que denotan al conjunto de objetos que representan, por ejemplo, VENTANA, CUENTA, FICHERO. En un conjunto reciben el nombre de clases o tipos si descienden de otra clase o subclase.
-Los objetos terminales. Son todos aquellos que descienden de una clase o subclase y no tienen descendientes. Suelen llamarse casos particulares, instancias o ítems porque representan los elementos del conjunto representado por la clase o subclase a la que pertenecen.
Veamos ahora en detalle los tres elementos mencionados en "Estructura de un Objeto".
1. RELACIONES
Las relaciones entre objetos son, precisamente, los enlaces que permiten a un objeto relacionarse con aquellos que forman parte de la misma organización.
Las hay de dos tipos fundamentales:
-Relaciones jerárquicas. Son esenciales para la existencia misma de la aplicación porque la construyen. Son bidireccionales, es decir, un objeto es padre de otro cuando el primer objeto se encuentra situado inmediatamente encima del segundo en la organización en la que ambos forman parte; asimismo, si un objeto es padre de otro, el segundo es hijo del primero (en la fig. 2, B es padre de D,E y F, es decir, D,E y F son hijos de B; en la fig. 3, los objetos B y C son padres de F, que a su vez es hijo de ambos).
Una organización jerárquica simple puede definirse como aquella en la que un objeto puede tener un solo padre, mientras que en una organizacion jerárquica compleja un hijo puede tener varios padres).
-Relaciones semánticas. Se refieren a las relaciones que no tienen nada que ver con la organización de la que forman parte los objetos que las establecen. Sus propiedades y consecuencia solo dependen de los objetos en sí mismos (de su significado) y no de su posición en la organización.
Se puede ver mejor con un ejemplo: supongamos que vamos a construir un diccionario informatizado que permita al usuario obtener la definición de una palabra cualquiera. Supongamos que, en dicho diccionario, las palabras son objetos y que la organización jerárquica es la que proviene de forma natural de la estructura de nuestros conocimientos sobre el mundo.
La raíz del diccionario podría llamarse TEMAS. De éste término genérico descenderán tres grandes ramas de objetos llamadas VIDA, MUNDO y HOMBRE. El primero (vida) comprenderá las ciencias biológicas: Biología y Medicina. El segundo (mundo), las ciencias de la naturaleza inerte: las Matemáticas, la Física, la Química y la Geología. El tercero (hombre) comprenderá las ciencias humanas: la Geografía, la Historia, etc.
Veamos un ejemplo: estableceremos la relación trabajo entre los objetos NEWTON y OPTICA y la interpretaremos diciendo que significa que Newton trabajó en óptica (véase la fig. 4). La relación es, evidentemente, semántica, pués no establece ninguna connotación jerárquica entre NEWTON y OPTICA y su interpretación depende exclusivamente del significado de ambos objetos.
La existencia de esta relación nos permitirá responder a preguntas como:
¿Quién trabajó en óptica?
¿En qué trabajó Newton?
¿Quien trabajó en Física?
Las dos primeras se deducen inmediatamente de la existencia de la relación trabajo. Para la tercera observamos que si Newton trabajó en óptica automáticamente sabemos que trabajó en Física, por ser óptica una rama de la Física (en nuestro diccionario, el objeto OPTICA es hijo del objeto FISICA). Entonces gracias a la OOP podemos responder a la tercera pregunta sin necesidad de establecer una relación entre NEWTON y FISICA, apoyandonos sólo en la relación definida entre NEWTON y OPTICA y en que OPTICA es hijo de FISICA. De este modo se elimina toda redundancia innecesaria y la cantidad de información que tendremos que definir para todo el diccionario será mínima.
2. PROPIEDADES
Todo objeto puede tener cierto número de propiedades, cada una de las cuales tendrá, a su vez, uno o varios valores. En OOP, las propiedades corresponden a las clásicas "variables" de la programación estructurada. Son, por lo tanto, datos encapsulados dentro del objeto, junto con los métodos (programas) y las relaciones (punteros a otros objetos). Las propiedades de un objeto pueden tener un valor único o pueden contener un conjunto de valores mas o menos estructurados (matrices, vectores, listas, etc.). Además, los valores pueden ser de cualquier tipo (numérico, alfabético, etc.) si el sistema de programación lo permite.
Pero existe una diferencia con las "variables", y es que las propiedades se pueden heredar de unos objetos a otros. En consecuencia, un objeto puede tener una propiedad de maneras diferentes:
-Propiedades propias. Están formadas dentro de la cápsula del objeto.
-Propiedades heredadas. Estan definidas en un objeto diferente, antepasado de éste (padre,"abuelo", etc.). A veces estas propiedades se llaman propiedades miembro porque el objeto las posee por el mero hecho de ser miembro de una clase.
3. METODOS
Una operación que realiza acceso a los datos. Podemos definir método como un programa procedimental o procedural escrito en cualquier lenguaje, que está asociado a un objeto determinado y cuya ejecución sólo puede desencadenarse a través de un mensaje recibido por éste o por sus descendientes.
Son sinónimos de 'método' todos aquellos términos que se han aplicado tradicionalmente a los programas, como procedimiento, función, rutina, etc. Sin embargo, es conveniente utilizar el término 'método' para que se distingan claramente las propiedades especiales que adquiere un programa en el entorno OOP, que afectan fundamentalmente a la forma de invocarlo (únicamente a través de un mensaje) y a su campo de acción, limitado a un objeto y a sus descendientes, aunque posiblemente no a todos.
Si los métodos son programas, se deduce que podrían tener argumentos, o parámetros. Puesto que los métodos pueden heredarse de unos objetos a otros, un objeto puede disponer de un método de dos maneras diferentes:
-Métodos propios. Están incluídos dentro de la cápsula del objeto.
-Métodos heredados. Estan definidos en un objeto diferente, antepasado de éste (padre,"abuelo", etc.). A veces estos métodos se llaman métodos miembro porque el objeto los posee por el mero hecho de ser miembro de una clase.
Polimorfísmo
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)
Demonios
Es un tipo especial de métodos, relativamente poco frecuente en los sistemas de OOP, que se activa automáticamente cuando sucede algo especial. Es decir, es un programa, como los métodos ordinarios, pero se diferencia de estos porque su ejecución no se activa con un mensaje, sino que se desencadena autmáticamente cuando ocurre un suceso determinado: la asignación de un valor a una propiedad de un objeto, la lectura de un valor determinado, etc.
Los demonios, cuando existen, se diferencian de otros métodos por que no son heredables y porque a veces están ligados a una de las propiedades de un objeto, mas que al objeto entero.
CONSIDERACIONES FINALES
Beneficios que se obtienen del desarrollo con OOP
Día a día los costos del Hardware decrecen. Así surgen nuevas áreas de aplicación cotidianamente: procesamiento de imágenes y sonido, bases de datos multimediales, automatización de oficinas, ambientes de ingeniería de software, etc. Aún en las aplicaciones tradicionales encontramos que definir interfases hombre-máquina "a-la-Windows" suele ser bastante conveniente.
Lamentablemente, los costos de producción de software siguen aumentando; el mantenimiento y la modificación de sistemas complejos suele ser una tarea trabajosa; cada aplicación, (aunque tenga aspectos similares a otra) suele encararse como un proyecto nuevo, etc.
Todos estos problemas aún no han sido solucionados en forma completa. Pero como los objetos son portables (teóricamente) mientras que la herencia permite la reusabilidad del código orientado a objetos, es más sencillo modificar código existente porque los objetos no interaccionan excepto a través de mensajes; en consecuencia un cambio en la codificación de un objeto no afectará la operación con otro objeto siempre que los métodos respectivos permanezcan intactos. La introducción de tecnología de objetos como una herramienta concepual para analizar, diseñar e implementar aplicaciones permite obtener aplicaciones más modificables, fácilmente extendibles y a partir de componentes reusables. Esta reusabilidad del código disminuye el tiempo que se utiliza en el desarrollo y hace que el desarrollo del software sea mas intuitivo porque la gente piensa naturalmente en términos de objetos más que en términos de algoritmos de software.
Problemas derivados de la utilización de OOP en la actualidad
Un sistema orientado a objetos, por lo visto, puede parecer un paraíso virtual. El problema sin embargo surge en la implementación de tal sistema. Muchas compañías oyen acerca de los beneficios de un sistema orientado a objetos e invierten gran cantidad de recursos luego comienzan a darse cuenta que han impuesto una nueva cultura que es ajena a los programadores actuales. Específicamente los siguientes temas suelen aparecer repetidamente:
Curvas de aprendizaje largas. Un sistema orientado a objetos ve al mundo en una forma única. Involucra la conceptualización de todos los elementos de un programa, desde subsistemas a los datos, en la forma de objetos. Toda la comunicación entre los objetos debe realizarse en la forma de mensajes. Esta no es la forma en que están escritos los programas orientados a objetos actualmente; al hacer la transición a un sistema orientado a objetos la mayoría de los programadores deben capacitarse nuevamente antes de poder usarlo.
Dependencia del lenguaje. A pesar de la portabilidad conceptual de los objetos en un sistema orientado a objetos, en la práctica existen muchas dependencias. Muchos lenguajes orientados a objetos están compitiendo actualmente para dominar el mercado. Cambiar el lenguaje de implementación de un sistema orientado a objetos no es una tarea sencilla; por ejemplo C++ soporta el concepto de herencia multiple mientras que SmallTalk no lo soporta; en consecuencia la elección de un lenguaje tiene ramificaciones de diseño muy importamtes.
Determinacion de las clases. Una clase es un molde que se utiliza para crear nuevos objetos. En consecuencia es importante crear el conjunto de clases adecuado para un proyecto. Desafortunadamente la definición de las clases es más un arte que una ciencia. Si bien hay muchas jerarquías de clase predefinidas usualmente se deben crear clases específicas para la aplicación que se este desarrollando. Luego, en 6 meses ó 1 año se da cuenta que las clases que se establecieron no son posibles; en ese caso será necesario reestructurar la jerarquía de clases devastando totalmente la planificación original.
Performance. En un sistema donde todo es un objeto y toda interaccion es a través de mensajes, el tráfico de mensajes afecta la performance. A medida que la tecnología avanza y la velocidad de microprocesamiento, potencia y tamaño de la memoria aumentan, la situacion mejorará; pero en la situación actual, un diseño de una aplicación orientada a objetos que no tiene en cuenta la performance no será viable comercialmente.
En la programación orientada a objetos, la herencia es un mecanismo que permite derivar una clase de otra, de manera que extienda su funcionalidad. En programación orientada a objetos el polimorfismo: se refiere a la posibilidad de definir clases diferentes que tienen métodos o atributos denominados de forma idéntica, pero que se comportan de manera distinta.
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.
Clasificación [editar]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).
Ejemplo de polimorfismo [editar]En este ejemplo haremos uso del lenguaje C++ para mostrar el polimorfismo. También se hará uso de las funciones virtuales puras de este lenguaje, aunque para que el polimorfismo funcione no es necesario que las funciones sean virtuales puras, es decir, perfectamente el código de la clase "superior" (en nuestro caso Empleado) podría tener código
class Empleado {protected: static const unsigned int SUELDO_BASE = 700; // Supuesto sueldo base para todos public: /* OTROS MÉTODOS */ virtual unsigned int sueldo() = 0;}; class Director : public Empleado {public: /* OTROS MÉTODOS */ unsigned int sueldo() { return SUELDO_BASE*100; }}; class Ventas : public Empleado {private: unsigned int ventas_realizadas; // Contador de ventas realizadas por el vendedor public: /* OTROS MÉTODOS */ unsigned int sueldo() { return SUELDO_BASE + ventas_realizadas*60; }}; class Mantenimiento : public Empleado {public: /* OTROS MÉTODOS */ unsigned int sueldo() { return SUELDO_BASE + 300; }}; class Becario : public Empleado {private: bool jornada_completa; // Indica si el becario trabaja a jornada completa public: /* OTROS MÉTODOS */ unsigned int sueldo() { if (jornada_completa) return SUELDO_BASE/2; else return SUELDO_BASE/4; }}; /* AHORA HAREMOS USO DE LAS CLASES */int main() { Empleado* e[4]; // Punteros a Empleado Director d; Ventas v; // Estas dos las declararemos como objetos normales en la pila e[0] = &d; // Asignamos a un puntero a Empleado la dirección de un objeto del tipo Director e[1] = &v; // Lo mismo con Ventas e[2] = new Mantenimiento(); e[3] = new Becario(); unsigned int sueldo = 0; for (int i = 0; i <>sueldo(); cout << "Este mes vamos a gastar " << sueldo << " dinero en sueldos" << endl;}
MétodoDe Wikipedia, la enciclopedia libreSaltar a navegación, búsquedaDel griego metha (más allá) y odos (camino), significa literalmente camino o vía para llegar más lejos; hace referencia al medio para llegar a un fin. En su significado original esta palabra nos indica que el camino conduce a un lugar.
Un método es una serie de pasos sucesivos, conducen a una meta. El objetivo del profesionista es llegar a tomar las decisiones y una teoría que permita generalizar y resolver de la misma forma problemas semejantes en el futuro. Por ende es necesario que siga el método más apropiado a su problema, lo que equivale a decir que debe seguir el camino que lo conduzca a su objetivo.
Algunos métodos son comunes a muchas ciencias, pero cada ciencia tiene sus propios problemas y por ende sus propias necesidades en donde será preciso emplear aquellas modalidades de los métodos generales más adecuados a la solución de los problemas específicos.
El método es un orden que debe imponer a los diferentes procesos necesarios apara lograr un fin dado o resultados. En la ciencia se entiende por método, conjunto de procesos que el hombre debe emprender en la investigación y demostración de la verdad.
El método no se inventa depende del objeto de la investigación. Los sabios cuyas investigaciones fueron coronadas con éxito tuvieron el cuidado de denotar los pasos recorridos y los medios que llevaron a los resultados. Otro después de ellos analizaron tales procesos y justificaron la eficacia de ellos mismos.