martes, 16 de marzo de 2010

CURSOR ADAPTER

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.

LENGUAJE SQL

SQL es el lenguaje de consulta universal para bases de datos.

Los mandatos de SQL se dividen en tres grandes grupos diferenciados, los cuales serán tratados por separado y que unicamente se presentan aqui a modo introductorio.

DDL (Data Definition Language), es el encargado de la definición de Bases de Datos, tablas, vistas e índices entre otros.

Son comandos propios de este lenguaje:
CREATE TABLE
CREATE INDEX
CREATE VIEW
CREATE SYNONYM


DML (Data Manipulation Language), cuya misión es la manipulación de datos. A través de él podemos seleccionar, insertar, eliminar y actualizar datos. Es la parte que más frecuentemente utilizaremos, y que con ella se construyen las consultas.

Son comandos propios de este lenguaje:
SELECT
UPDATE
INSERT
INSERT INTO
DELETE FROM


DCL (Data Control Laguage), encargado de la seguridad de la base de datos, en todo lo referente al control de accesos y privilegios entre los usuarios.

Son comandos propios de este lenguaje:
GRANT
REVOKE


Cláusulas

Las cláusulas son condiciones de modificación utilizadas para
definir los datos que desea seleccionar o manipular.

Comando Descripción

Cláusula FROM

La cláusula FROM lista las tablas o ficheros que contienen los datos a recuperar por la consulta. El formato de esta cláusula es:

FROM nombretabla [alias_tabla] ...

nombretabla puede ser una o mas nombres de tabla en el directorio de trabajo si se omite este, o en un directorio distinto si se especifica.

alias_tabla es un nombre que se usa para referirse a la tabla en el resto de la sentencia SELECT para abreviar el nombre original y hacerlo más manejable, en el caso de existir más de una tabla en la consulta y, también para poder realizar consultas uniendo varias veces la misma tabla. Por ejemplo,



SELECT A.NOMBRE, A.APELLIDOS FROM MATRICUL M, ALUMNOS A WHERE M.MATRICULA = A.MATRICULA AND M.GRUPO = ‘1A’ AND ANNO = 1995

es mucho más práctico y sencillo que:

SELECT ALUMNOS.NOMBRE, ALUMNOS.APELLIDOS FROM MATRICUL, ALUMNOS WHERE MATRICUL.MATRICULA = ALUMNO.MATRICULA AND MATRICUL.GRUPO = ‘1A’ AND ANNO = 1995

Las dos sentencias son idénticas y nos devolverían los nombres y apellidos del alumnado matriculado en el año 1995 y que figuran en el grupo 1A. El nombre de tablas junto al nombre de campo es obligatorio cuando existan campos con nombre idéntico en las tablas que formen parte de la sentencia. Así en el ejemplo anterior NOMBRE y APELLIDOS no lo necesitarían (aunque este puesto) pero MATRICULA si lo necesita porque en las dos tablas existe un campo con ese nombre.

Si no se pudiera utilizar alias, no se podría unir una tabla consigo misma y la siguiente consulta no se podría llevar a cabo:

SELECT A.NOMBRE, A.APELLIDOS, H.NOMBRE FROM ALUMNOS A, ALUMNOS H WHERE A.PADRE = H.PADRE

que nos devolverá el nombre de aquellos alumnos/as que tienen el mismo padre, es decir, son hermanos.



Cláusula WHERE

La cláusula WHERE dice a SQL que incluya solo ciertas filas o registros de datos en los resultados de la consulta, es decir, que tienen que cumplir los registros que se desean ver. La cláusula WHERE contiene condiciones en la forma:

WHERE expresión1 operador expresion2

expresión1 y expresion2 pueden ser nombres de campos, valores constantes o expresiones.

operador es un operador relacional que une dos expresiones. Más tarde se verán los distintos operadores que se puede utilizar.

Por ejemplo, la siguiente sentencia nos muestra el nº de alumnos que han nacido con posterioridad a 1985.

SELECT COUNT(*) FROM ALUMNOS WHERE YEAR(FECHA_NACIMIENTO) > 1985



Cláusula GROUP BY

La cláusula GROUP BY especifica una consulta sumaria. En vez de producir un fila de resultados por cada fila de datos de la base de datos, una consulta sumaria agrupa todas las filas similares y luego produce una fila sumaria de resultados para cada grupo.

Seguido de la cláusula GROUP BY se especifican los nombres de uno o más campos cuyos resultados se desean agrupados. Tiene la forma:

GROUP BY expresión_columna

expresión_columna debe coincidir con la expresión de columna utilizada en la cláusula SELECT. Puede ser uno o más nombres de campo de una tabla, separados por coma o una o más expresiones separadas por comas. El siguiente ejemplo nos dice cuantos alumnos están matriculados en cada grupo en el año 1995:

SELECT GRUPO, COUNT(*) FROM MATRICUL WHERE ANNO = 1995 GROUP BY GRUPO

Esta sentencia nos devolverá una fila por cada grupo de alumnos. Cada una de ellas contendrá el grupo y el nº de alumnos en él.



Cláusula HAVING

La cláusula HAVING dice a SQL que incluya solo ciertos grupos producidos por la cláusula GROUP BY en los resultados de la consulta. Al igual que la cláusula WHERE, utiliza una condición de búsqueda para especificar los grupos deseados. En otras palabras, especifica la condición que deben de cumplir los grupos. Sólo es válida si previamente se ha especificado la cláusula GROUP BY. La cláusula HAVING tiene la forma:

HAVING expresión1 operador expresión2

expresión1 y expresión2 pueden ser nombres de campos, valores constantes o expresiones y estas no deben coincidir con una expresión de columna en la cláusula SELECT.

operador es un operador relacional que une las dos expresiones. Más tarde se verán los distintos operadores que se puede utilizar.

La sentencia siguiente nos mostrará el número de alumnos en cada grupo de 1995 cuyo numero de integrantes supera los 30:

SELECT GRUPO, COUNT(*) FROM MATRICUL WHERE ANNO = 1995 GROUP BY GRUPO HAVING COUNT(*) > 30



Operador UNION

El operador UNION combina el resultado de dos sentencias SELECT en un único resultado. Este resultado se compone de todos los registros devueltos en ambas sentencias. Por defecto, los registros repetidos se omiten. Para no quitarlos se empleará la palabra ALL. Tiene la forma:

SELECT sentencia UNION [ALL] SELECT sentencia

Cuando se utilice el operador UNION, la lista de selección para cada sentencia SELECT debe tener el mismo número de expresiones de columnas con el mismo tipo de datos y en el mismo orden. Por ejemplo,

SELECT APELLIDOS, NOMBRE FROM ALUMNOS UNION SELECT APELLIDOS, NOMBRE FROM PROFESOR UNION SELECT APELLIDOS, NOMBRE FROM PERSONAL

Este ejemplo tiene el mismo nº de columnas y cada columna en orden con el mismo tipo de datos. Nos devolverá una lista única de alumnos, profesores y personal no docente.



Cláusula ORDER BY

La cláusula ORDER BY ordena los resultados de la consulta en base a los datos de una o más columnas. Si se omite, los resultados saldrán ordenados por el primer campo que sea clave en el índice que se haya utilizado.

Por tanto, indica como deben clasificarse los registros que se seleccionen. Tiene la forma:

ORDER BY {expresión_orden [DESC ASC], ... ]

expresión_orden puede ser el nombre de un campo, expresión o el número de posición que ocupa la expresión de columna en la cláusula SELECT. Por defecto se ordenan ASCendentemente (de menor a mayor). Si se deseará de mayor a menor se empleará DESC (DESCendente). Por ejemplo, para mostrar los alumnos ordenados de mayor edad a menor, se utilizaría:

SELECT NOMBRE, APELLIDOS FROM ALUMNOS ORDER BY FECHA_NACIMIENTO DESC

Para obtener un listado de alumnos por su lugar de nacimiento ordenado por provincias y dentro de cada provincia ordenados por localidades se utilizaría:

SELECT NOMBRE+’ ‘+APELLIDOS, LOCALIDAD_NACIMIENTO, PROVINCIA_NACIMIENTO FROM ALUMNOS ORDER BY PROVINCIA, LOCALIDAD

o lo mismo de otra forma

SELECT NOMBRE+’ ‘+APELLIDOS, LOCALIDAD_NACIMIENTO, PROVINCIA_NACIMIENTO FROM ALUMNOS ORDER BY 3, 2

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
<> Mayor
que
<> Distinto
de
<= Menor ó Igual que >= Mayor
ó 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.

Comando 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.

lunes, 22 de febrero de 2010

FOXPRO 8.0

INTRODUCCION A LA PROGRAMACION ORIENTADA A OBJETOS



En el transcurso de los últimos 35 años, los diseñadores de hardware para ordenadores han pasado del diseño de equipos del tamaño de un hangar a ordenadores portátiles basados en microprocesadores minúsculos.
En el mismo periodo, los desarrolladores de software han pasado de escribir programas en ensamblador y COBOL a escribirlos en C y C++. Podríamos denominar a esto progreso (algunas personas no estarían de acuerdo), pero claramente en mundo de software no progresa tan rápidamente como el mundo hardware. Entonces ¿Qué tienen los diseñadores de hardware que los desarrolladores de software no poseen.


Que es?


La programación orientada a objeto (poo u oop según sus siglas en ingles) es un paradigma en programación que usa objetos y sus interacciones para diseñar aplicaciones y programas de computadoras. Esta basado en varias técnicas, incluyendo herencia, modularidad, polimorfismo, y encapsulamiento. Su uso se popularizo a principio de la década 1990. Actualmente son muchos los lenguajes de programación que soportan la orientación a objetos.


Historia


Al mismo tiempo que se da la crisis del software, por otro lado la orientación a objeto (oo) se empezó a discutir a fines de los años 60 con el desarrollo del lenguaje SIMULA67 por nigaard y ole-johan dahi en el centro de cálculo noruego. En el, introdujeron los concepto de clases subclases y rutinas, muy parecidos los conceptos a los lenguajes de orientación a objeto de hoy en día. A mitad de la década de los 70 los científicos del centro de investigación palo alto de XEROX (PARC) (XEROX palo alto research center) crearon el lenguaje SMALLTALK, el primer lenguaje orientado a objeto consistente y completo. En el cada elemento del lenguaje fue realizado un objeto. Este ultimo lenguaje evoluciono atreves de varios elementos realizados por PARC.A pesar de este movimiento temprano hacia los lenguajes orientados a objetos, solo se lograron pequeñas incursiones en la comunidad de la programación general. El progreso reciente se a acelerado debido principalmente a la disponibilidad de la extensiones orientadas a objetos para dos lenguajes populares C y PASCAL, y las extensiones prometidas para otros lenguajes comerciales populares como BASIC y COBOL


Objeto


Consiste en ordenar datos en conjuntos modulares de elemento de información del mundo real (denominado un dominio), estos elementos de datos se llaman OBJETO. Estos datos se agrupan de acuerdo a las características principales del mundo real estos elementos (tamaño, color, etc).
El enfoque de objeto es una idea que se ha probado con creces, simula fue el primer lenguaje de programación en implementar en concepto de clases en 1967. En 1976, samalltalk implemento los concepto de encapsulamiento, agrupación, herencia (los concepto principales de la programación orientada a objeto a escala global (Eiffel, objetive c, loops, etc.,).


Un objeto de caracteriza por varios conceptos:


· ATRIBUTOS: esto son los datos que caracterizan al objeto son variables que almacenan datos relacionados al estado de un objeto.
· METODOS: (usualmente llamados funciones de miembro). Los métodos de un objeto caracterizan su comportamiento, es decir son todas las acciones (denominadas operaciones) que el objeto pueda realizar por si mismo. Estas operaciones hacen posible que el objeto responda a las solicitudes externas (o que actué sobre otro objeto).a demás las operaciones están estrechamente ligadas a los atributos, ya que sus acciones pueden depender de, o modificar, los valores de un atributo.
· IDENTIDAD: el objeto tiene una identidad, que lo distingue de otros objetos, sin considerar su estado. Por lo general, esta identidad se crea mediante un identificador que deriva de naturalmente de un problema (por ejemplo: un producto puede estar representado por un código, un automóvil, por un numero de modelo, etc.).


CLASE


Es la estructura de un objeto, es decir, la definición de todos los elementos de que esta hecho un objeto. Un objeto es, por lo tanto, el “resultado” de una clase. En realidad, un objeto es una instancia de una clase, por lo que se puede intercambiar los términos objetos o instancia (o incluso evento).


Una clase se compone en dos partes:


· ATRIBUTOS: (denominados, por lo general, datos miembros): esto es, los datos que se refieren al estado del objeto.
· METODOS: (denominados, por lo general, funciones miembro): son funciones que se pueden aplicar a objetos.
Si tenemos una clase llamada auto los objetos Peugeot y Renault será instancias de esa clase también pueden haber otro objetos Peugeot 406, diferenciado por su numero de modelo asi mismo dos instancias de una clase puedan tener los mismo atributos pero considerarse objetos distintos independiente.


HERENCIA


Es especifica de la programación orientada a objeto, donde una clase nueva se crea a partir de una clase existente. La herencia (la nueva clase creada) contiene las atributos y métodos de la clases primaria. La principal ventaja de la herencia es la capacidad para definir atributos y métodos nuevos para subclase, que luego se aplica a los atributos y métodos heredados.
Esta particularidad permite crear una estructura jerárquica de clases cada vez más especializada. La gran ventaja es que uno ya no debe comenzar desde cero cuando cuando deseas especializar una clase existente.

ENCAPSULAMIENTO


Es un mecanismo que consiste en organizar datos y métodos de una estructura, conciliando el modo en que el objeto se implementa, es decir, evitando el acceso a datos por cualquier otro medio distinto a los especificados, por lo tanto, la encapsulación garantiza la integridad de los datos que contiene un objeto.


POLIMORFISMO


Proviene del griego y significas que posee varias formas diferentes. Este es unos de los conceptos esenciales de una programación orientada a objetos. Así como la herencia esta relacionada con las clases y jerarquía. El polimorfismo se relaciona con los métodos.


En general, hay tres tipos de polimorfismo:


1. Polimorfismo de sobrecarga.
2. Polimorfismo paramétrico ( también llamado polimorfismo de plantilla)
3. Polimorfismo de inclusión ( también llamado redefinición o subtipado)



PROPIEDAD O ATRIBUTO

Contenedor de un tipo de dato asociado a un objeto (o a una clase de objeto). Que hace los datos visibles desde fuera del objeto y esto se define como sus características predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún método.

EVENTO


Un suceso en el sistema (tal como una interacción del usuario con la maquina, o un mensaje enviado por un objeto), el sistema maneja el evento enviado en mensaje adecuado al objeto pertinente. También se puede definir como evento. A la reacción que puede desencadenar un objeto. Es decir la acción que genera.


METODO

El otro elemento característico de una clase son los métodos. Los métodos son acciones que pueden realizar los objetos, es decir, son funciones o procedimientos asociados a este tipo objeto.
En el caso de las personas podemos decir que pueden nacer, morir, casarse, tener hijos, etc... Para dar un primer ejemplo de esto veamos uno de sus métodos : DEFINE CLASS persona AS CUSTOM
cNombre = ""
cApellidos = ""
dFechaNacimiento = {}
cEstadoCivil = "Soltero"
PROCEDURE Nacer
LPARAMETER cNombre, ;
cApellidos, ;
dFecha
This.cNombre = cNombre
This.cApellidos = cApellidos
This.dFechaNacimiento = dFecha
ENDPROC
ENDDEFINE
En este método damos valor a tres propiedades del objetos a partir de los parámetros que se nos han pasado. Quizás sea todavía poco evidente este código, pero poco a poco iremos entendiendolo.
En primer lugar debemos diferenciar entre los parámetros de este método y las propiedades. Los parámetros son variables y se perderán al finalizar la ejecución del método. Las propiedades, que son la que empiezan con la sintaxis This., permanecen mientras dure la existencia del objeto.
Por otra parte, este procedimiento, denominado Nacer, se diferencia de los procedimientos que estamos acostumbrados a escribir en que sólo es llamable asociado a un objeto de la clase Persona y no puede ser invocado de forma independient e. Esta es una de las grandes diferencias entre la programación estructurada y la POO.
Mensajes. Cuando llamamos a un método de un objeto se dice que estamos enviando un mensaje al objeto para que realice una determinada acción. Así cuando enviamos un mensaje de nacer a un objeto persona estamos ejecutando el método correspondiente : oPersona1 = CREATEOBJECT( "Persona" )
oPersona1.Nacer( "María", ;
"Pérez González", ;
{20-10-75} )
? oPersona1.cNombre
? oPersona1.cApellidos