viernes, 19 de julio de 2013

Datos alfabéticamente en un arreglo

Ejemplos prácticos alimentan la noción del emprendedor.

Saludos les comparto un nuevo ejemplo para ampliar aun mas el uso de estructuras de datos del tipo arreglo. En esta oportunidad le muestro como ingresar dato de manera ordenada en un arreglos de string, sin duplicidad. Particularmente siempre suelen pedirse en las practicas este tipo de métodos, puesto que es mas rápido acceder a los datos si tienen un orden especifico.

Cuando se trabaja con arreglos ordenados se debe evitar alterar el orden al insertar nuevos elementos o al modificar los existentes.
Metodología para Inserción:
  • Para insertar un elemento X (cualquiera) en un arreglo unidimensional V ordenado, primero se debe verificar que exista espacio.
  • Luego se encontrará la posición en la que debería estar el nuevo valor para no alterar el orden del arreglo. Cuando se detecte la posición, se procederá a recorrer todos los elementos desde ahí hasta la N-ésima posición. Finalmente se asignará el valor de X en la posición encontrada.
  • Cabe destacar que el desplazamiento no se lleva a cabo cuando el valor a insertar es mayor que el último elemento del arreglo.
    Generalmente, cuando se quiere hacer una inserción se debe verificar que el elemento no se encuentre en el arreglo. En la mayoría de los casos prácticos no interesa tener información duplicada; por tanto, si el valor que se desea insertar ya estuviera en el arreglo, la operación no se llevará a cabo.

Ejemplo

 

Codigo fuente

public class ArregloOrdenado {
    
        //forma#1
  String [] Nombres;
  String [] Mensaje={"Disponible",
                    "Espacio no Disponible",
                    "Error de formato",
                    "Sistema iniciado",
                    "Dato repetido"
                    };
  String linea;
  InputStreamReader Flujo_bytes= new InputStreamReader (System.in);
  BufferedReader entrada= new BufferedReader (Flujo_bytes); 
  
   public void iniciarSistema(){
      System.out.println("Para Iniciar el sistema debe ingresar el numero de datos a registrar:");
      try {
          linea= entrada.readLine();
      
      } catch (IOException ex) {
          System.out.println(Mensaje[2]);
      } 
      
      try{
      int numPersona= Integer.parseInt(linea);
      Nombres= new String[numPersona];
      System.out.println(Mensaje[3]);
       linea=null;
      }catch(NumberFormatException e){
           System.out.println( Mensaje[2] +" debe ingrese numeros");
           iniciarSistema();
      }
       
 }
 
   
    public void registrarUsuario(){
 int tamaño= Nombres.length;
 int contador=0;
  while(contador<tamaño){
            System.out.println("Ingrese el nombre de usuario");  
                try {
                    linea= entrada.readLine();
                    listarOrdenado(linea);

                } catch (IOException ex) {
                    System.out.println(Mensaje[2]);
                }

                contador++;
  
        }
     
 
 }
    
    public void listarOrdenado(String nombre){

   int N=Nombres.length;
   int l = 0;
   int pos =busquedaSecuencial(nombre);
   
 
 
 
    if (pos<N&pos!=-1) {
     System.out.println(Mensaje[0]+" casilla " + pos); 
        switch(pos){//caso 1
            case 0:// este es el caso en que sea el primer elemento
                
                  Nombres[pos] = nombre;
                
                break;
            default: //caso 2
 //*************************** ordenado               
               char[] inicialNombres =  Nombres[pos-1].toCharArray();
               char[] inicialNuevo =  nombre.toCharArray(); 
               int ordenAnterior= (int)inicialNombres[0];
               int ordenNuevo= (int)inicialNuevo[0];
               
                if( ordenAnterior<ordenNuevo|ordenAnterior==ordenNuevo){//
                  System.out.println("Dato en orden");
                  Nombres[pos] = nombre;
                }else{
                //hacer un cambio
                  System.out.println("Se intercabia posiciones");

                  while(l<N&Nombres[l]!=null){
                       inicialNombres =  Nombres[l].toCharArray();
                       int actual= (int)inicialNombres[0];                    
                       if( ordenNuevo<actual|actual==ordenNuevo){               
                    break;
                    }

                  l++;
                  }
                  

                   System.out.println("Debe ir en la posicon: "+ l); 
                   if(l<N){
                       
                  String temp=  Nombres[l];
                  Nombres[l]=nombre;
                  String aux=null;
                  int contador=l+1;
                        while(contador<N){
                       aux=  Nombres[contador]; //toma el dato siguiente   
                       Nombres[contador]= temp;// en la posicion siguiente inserta el nuevo
                       temp=  aux;//asigna el dato anterio que no tiene casilla.
//                          
                            
                        contador++;
                        }
                       
                   
                   }
                    
                }
         
                
  //***************************Fin ordenado          
        
        }
        
      
        
    } else if(pos==-1) {
        
          System.out.println(Mensaje[4]);
    }else{
    System.out.println(Mensaje[1]);
    }


}
    
    private int busquedaSecuencial(String nombre) {
    int respueta=0;
    int N=Nombres.length;
    int l=0;   

            while(l<N&&Nombres[l]!=null){    

               if(Nombres[l].equals(nombre)){
                l=-1;
                break;
               }
               l++;

           }
 respueta=l;
  
    return respueta;
       
    }
    
    public void listarDatos(){
     System.out.println("************Incio de listar******************");
 for (int i = 0; i < Nombres.length; i++) {

               
                System.out.println("Usuario \t"+Nombres[i]);
               
         }
    System.out.println("************Fin de listar******************");

}
  
    
}

// metodo principal 
public static void main(String[] args) {
      ArregloOrdenado objeto= new ArregloOrdenado();
      objeto.iniciarSistema();
      objeto.registrarUsuario();
      objeto.listarDatos();
       
    }

viernes, 12 de julio de 2013

Modelo Vista Controlador

Les dejo un pequeño instructivo el  cual es de mucha utilidad para incursionar en el desarrollo de software de calidad.
En el se describen conceptos que permiten entender sus orígenes e importancia del uso  de patrones de diseño, para dar soluciones a problemas comunes en el mismo desarrollo del software.


lunes, 8 de julio de 2013

Asignación de memoria y Punteros

Les comparto mi primer instructivo, el cual se desarrolla  temas de programación fundamentales para el desarrollo de estructuras de datos.
El cual hace énfasis en el proceso de asignatura de la memoria y  una comparación entre el lenguaje Java y C, en el manejo de punteros.  

Sugerencias son bienvenidas y espero que les sea de gran utilidad.


viernes, 5 de julio de 2013

Ejemplo: estructuras de datos del tipo arreglo

Ejemplos prácticos alimentan la noción del emprendedor.

Diagrama del clase del ejemplo 1
Les comparto la ultima parte del vídeo, en el cual dimos solución a un problema planteado, el cual requería la implementacion de los métodos elementales para la gestión de un registro de datos :
Registrar, buscar, remplazar y eliminar.

Utilizando  un arreglo de datos del tipo String.
El vídeo describe la realización del programa como también el uso de los métodos implementados, en la parte baja del vídeo encontraran el código fuente del mismo.

Temas sugeridos si aun no comprendes el uso de datos del tipo arreglo. Dejo los enlaces a continuación:

Fundamentos de Arreglos o Array
Apuntadores en java.

Ejemplo 1 parte 2

 

Código fuente


public class ArregloSimple {
    
      //Tipos Simples
  private  String mensaje;
  private  String linea;
  private boolean asignado;
  
     //forma#1
//  String [] Nombres;
//  String [] Clasificaciones={"Disponible","Espacio no Disponible","Error de formato","Sistema iniciado"};
  //forma#2
   private  String [] Nombres, Clasificacion={"Disponible","Espacio no Disponible","Error de formato","Sistema iniciado"};
   InputStreamReader Flujo_bytes= new InputStreamReader (System.in);
   BufferedReader entrada= new BufferedReader (Flujo_bytes); 
 public void iniciarSistema(){
      System.out.println("Para Iniciar el sistema debe ingresar el numero de datos a registrar:");
      try {
          linea= entrada.readLine();
      
      } catch (IOException ex) {
          Logger.getLogger(ArregloSimple.class.getName()).log(Level.SEVERE, null, ex);
      }
      
      
      try{
      int numPersona= Integer.parseInt(linea);
      Nombres= new String[numPersona];
      System.out.println( Clasificacion[3]);
      }catch(NumberFormatException e){
           System.out.println( Clasificacion[2] +" debe ingrese numeros");
           iniciarSistema();
      }
       
 }
 
 public void registrarUsuario(){
  boolean respuesta= true;
  while(respuesta){
  System.out.println("Ingrese el nombre de usuario");  
      try {
          linea= entrada.readLine();
          listarSimple(linea);
          
      } catch (IOException ex) {
          Logger.getLogger(ArregloSimple.class.getName()).log(Level.SEVERE, null, ex);
      }
      
      try{
      System.out.println("Desea registrar otro usuario? SI o NO");   
      linea= entrada.readLine();
     
      
       if( linea.equalsIgnoreCase("si")){
              continue;
              }else if( linea.equalsIgnoreCase("no")){
              break;
              }
      
      }catch (IOException ex) {
              Logger.getLogger(ArregloSimple.class.getName()).log(Level.SEVERE, null, ex);
          }
  
  }
     
 
 }
  
public void listarSimple (String nombre){
asignado= false;
if(Nombres!=null){//analizar si existe
        
                for (int i = 0; i < Nombres.length; i++) {

                if(Nombres[i]== null){
                System.out.println("Casilla \t"+i+Clasificacion[0]);
                Nombres[i]=nombre;
                
                asignado=true;
                break;
                }
                    
                
            }
            
        }



if(asignado){
            mensaje="Asignado Exitosamente";
            System.out.println(mensaje); 
        }else{
              mensaje="No existe Espacio suficiente";
            System.out.println(mensaje); 
        }


}

public void listarDatos(){
     System.out.println("************Incio de listar******************");
 for (int i = 0; i < Nombres.length; i++) {

               
                System.out.println("Usuario \t"+Nombres[i]);
               
         }
    System.out.println("************Fin de listar******************");

}

public boolean buscar(String Usuario){
    boolean respueta = false;
    
    for (int i = 0; i < Nombres.length; i++){
       String buscado=  Nombres[i];
    if (buscado.equalsIgnoreCase(Usuario)){
        respueta= true;
        break;
        }
    
    }
    
    
    
    
return respueta;
}


public void reemplazar(String Usuario, String buscado){



    for (int i = 0; i < Nombres.length; i++){
       String existe=  Nombres[i];
    if (buscado.equalsIgnoreCase(existe)){
        String anterior= Nombres[i];
        Nombres[i]=Usuario;
        System.out.println("Fue sustituido" +anterior+" por: "+Usuario);
        break;
        }
    
    }

}

public void reemplazar(String Usuario, int buscado){


 int datos=  Nombres.length;
   
      
    if (buscado < datos){
        String anterior= Nombres[buscado];
        Nombres[buscado]=Usuario;
        System.out.println("Fue sustituido " +anterior+" por: "+Usuario);
       
        }
    
    

}



public void Eliminar(String Usuario){
 
    
    for (int i = 0; i < Nombres.length; i++){
       String buscado=  Nombres[i];
    if (buscado.equalsIgnoreCase(Usuario)){
       Nombres[i]=null;
        break;
        }
    
    }
    
}
public void Eliminar(int index){
 
    
   int datos=  Nombres.length;
   
        
    if (index < datos){ 
       Nombres[index]=null;
    }
    
}
}

//clase principal 
public static void main(String[] args) {
      ArregloSimple objeto= new ArregloSimple();
      objeto.iniciarSistema();
      objeto.registrarUsuario();
      objeto.listarDatos();
      
//        boolean buscar = objeto.buscar("ana");
//        if(buscar){
//        System.out.println("Si existe el dato buscado" );
//        }else{
//        System.out.println("el dato buscado no existe");
//        }
//      objeto.reemplazar("ana", "alex");
//      objeto.reemplazar("ana", 2);
//      objeto.Eliminar("alex");
      objeto.Eliminar(3);
     objeto.listarDatos();
      
      
    }

sábado, 1 de junio de 2013

Ejemplo: Uso de arreglos o array como estructura de datos

Aquel que pregunta una vez es tonto una vez, aquel que no pregunta nunca es tonto siempre.

Comparto un ejemplo del uso de arreglos, como una estructura de datos, proporcionando solución a un problema planteado.
Si la explicación aun no te queda clara puedes consultar la anterior publicación la cual es un instructivo como manual de bolsillo indispensable, con el cual puedes aprender rápidamente el uso de los mismos.

Fundamentos de Arreglos o Array
Apuntadores en java.

Ejemplo 1 parte 1

 



Código fuente

//Librerias importantes

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;


public class ArregloSimple {
    
      //Tipos Simples
  private  String mensaje;
  private  String linea;
  private boolean asignado;
  
     //forma#1
//  String [] Nombres;
//  String [] Clasificaciones={"Disponible","Espacio no Disponible","Error de formato","Sistema iniciado"};
  //forma#2
   private  String [] Nombres, Clasificacion={"Disponible","Espacio no Disponible","Error de formato","Sistema iniciado"};
  
   
   InputStreamReader Flujo_bytes= new InputStreamReader (System.in);
   BufferedReader entrada= new BufferedReader (Flujo_bytes); 
 public void iniciarSistema(){
      System.out.println("Para Iniciar el sistema debe ingresar el numero de datos a registrar:");
      try {
          linea= entrada.readLine();
         
      } catch (IOException ex) {
         System.out.println("Error ");

      }
      
      
      try{
      int numPersona= Integer.parseInt(linea);
      Nombres= new String[numPersona];
      System.out.println( Clasificacion[3]);
      }catch(NumberFormatException e){
         System.out.println("Error ");

      }
       
 }
 
 public void registrarUsuario(){
  boolean respuesta= true;
  while(respuesta){
  System.out.println("Ingrese el nombre de usuario");  
      try {
          linea= entrada.readLine();
          listarSimple(linea);
         
      } catch (IOException ex) {
         System.out.println("Error ");

      }
      
      try{
      System.out.println("Desea registrar otro usuario? SI o NO");   
      linea= entrada.readLine();
      System.out.flush();
      
       if( linea.equalsIgnoreCase("si")){
              continue;
              }else if( linea.equalsIgnoreCase("no")){
              break;
              }
      
      }catch (IOException ex) {
             System.out.println("Error ");

          }
  
  }
     
 
 }
  
public void listarSimple (String nombre){
asignado= false;
if(Nombres!=null){//analizar si existe
        
                for (int i = 0; i < Nombres.length; i++) {

                if(Nombres[i]== null){
                System.out.println("Casilla \t"+i+Clasificacion[0]);
                Nombres[i]=nombre;
                
                asignado=true;
                break;
                }
                    
                
            }
            
        }

if(asignado){
            mensaje="Asignado Exitosamente";
            System.out.println(mensaje); 
        }else{
              mensaje="No existe Espacio suficiente";
            System.out.println(mensaje); 
        }


}

public void listarDatos(){
 for (int i = 0; i < Nombres.length; i++) {

               
                System.out.println("Usuario \t"+Nombres[i]);
               
         }


}

    
}


//clase con el metodo principal (main)
public class Ejemplo2 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
      ArregloSimple objeto= new ArregloSimple();
      objeto.iniciarSistema();
      objeto.registrarUsuario();
      objeto.listarDatos();
      
      
    }
}

Estructura de datos tipo arreglo o array

Aquel que pregunta una vez es tonto una vez, aquel que no pregunta nunca es tonto siempre.



Lo que debemos saber

 

Definición de estructura de datos:
Una definición exacta de un estructura se puede mencionar:
Se puede definir como una estructura de datos a una organización o estructuración de una colección de elementos dato. Es decir que es un conjunto de datos con relaciones bien definidas.
Una definición  exacta de  arreglos:
Un array o Arreglos es normalmente, una colección de datos de un tamaño o longitud fija, cada uno de cuyo datos es accesible en tiempo de ejecución mediante la evaluación de las expresiones que representan a los sub indices o indices correspondientes. Todos los elementos de un array deben ser del mismo tipo.

Características de un arreglo

Finita: todo arreglo tiene un límite; es decir, se debe determinar cuál será el número máximo de elementos que formarán parte del arreglo.
  • Homogénea: todos los elementos de un arreglo son del mismo tipo. Es decir, todos enteros, todos booleanos, etcétera, pero nunca una combinación de distintos tipos.
  • Ordenada: se puede determinar cuáles son el primero, el segundo, el tercero, ... y el enésimo elementos.
  • Si un arreglo tiene la característica de que puede almacenar a N elementos del mismo tipo, entonces deberá permitir la recuperación de cada uno de ellos. 

Los índices tam-bién permiten hacer referencia a los componentes del arreglo en forma individual; es decir, distinguirán entre sus elementos. Por tanto, para hacer referencia a un elemento
de un arreglo se debe utilizar:

  • El nombre del arreglo.
  • El índice del elemento.

El proceso que se puede realizar con arrays abarca las siguientes operaciones:
Declaración, creación, inicialización y utilización. Las operaciones de declaración, creación e inicialización son necesarias para poder utilizar un arreglo o array.




Declaración de un arreglo

La declaración de un array es la operación mediante la cual se define su nombre con un identificador válido y el tipo de los elementos del array. La sintaxis para declarar un array puede adoptar dos formatos:

  tipoDato [ ] nombreArray 

TipoDato nombreArray[ ] 


  Ejemplo 


  //Se declara un array lilista de tipo double 

    double [ ] miLista;

    double miLista[]; 


  //  Se declara un array temperatura de tipo float 

    float temperatura[];

    float [ ] temperatura; 

    

    

Las declaraciones no especifican el tamaño del array que se especificará cuando se cree el mismo.

Creación de un arreglo

Un array o arreglo en Java es un objeto y la declaración no asigna espacio en memoria para el array. No se pueden asignar elementos al array a menos que el array esté ya creado. Después que se ha declarado un array se puede utilizar el operador new para crear el array con la sintaxis siguiente:
nombreArray = new tipoDato [ tamaño] ; 

nombreArray es el nombre del array declarado previamente, tipo Dato es el tipo de dato de los elementos del array y tamaño es la longitud o tamaño del array y es una expresión entera cuyo valor es el número de elementos del array.
Ejemplo

    miLista = new double [8]; // array miLista de 8 elementos 

    temperatura = new float [30]; // array temperatura de 30 elementos 

Inicialización y utilización

Cuando se crea un array, a los elementos se les asigna por defecto el valor cero para las variables numéricas de tipos de datos primitivos, ’ \u O O O para variables de tipo carácter, char, false para variables lógicas, boolean, y null para variables objetos. A los elementos del array se accede a través del índice. Los índices del array están en el rango de O a tamaño-l. Así, miLista contiene 8 elementos y sus índices son O, 1, 2, . . . , 7. Cada elemento del array se representa con la siguiente sintaxis:


    nombreArray[índice]; 

    Ejemplo 1

    milista [ 7];// representa el último elemento del array 

Ejemplo 2
Un array completo se puede inicializar con una sintaxis similar a
double[] miLista = { 1.5, 2.45, 3.15, 7.25, 8.4 };
esta sentencia crea el array mi Li s t a que consta de cinco elementos.

Cálculo del tamaño de un arreglo

El tamaño de un array se obtiene con una variable instancia length. Así, por ejemplo, si se crea un array milista, la sentencia miLista. length devuelve el tamaño del array
miLista (10, por ejemplo).

jueves, 23 de mayo de 2013

Tipos de datos compuestos y agregados


«La mayoría de los buenos programadores programan no porque esperan que les paguen o que el público los adore, sino porque programar es divertido.»
-Linus Torvalds


Los datos compuestos se pueden subdividir  en campos  que tengan significado.
En algunos  ocasiones los datos  compuestos se conocen  también como datos o tipos agregados. Los tipos agregados son datos  cuyos valores  constan de colecciones de elementos de datos.  Un tipo agregado se compone de tipos  de datos previamente definidos. Existen tres  tipos agregados  básicos: Arrays (arreglos), secuenciales y registros.

Arreglos o Array

 

Un array es normalmente, una colección de datos de un tamaño o longitud fija, cada uno de cuyo datos es accesible en tiempo de ejecución mediante la evaluación de las expresiones que representan a los sub indices o indices correspondientes. Todos los elementos de un array deben ser del mismo tipo.

Datos secuenciales

Una secuencia o cadena es en esencia, un array cuyo tamaño puede variar en tiempo de ejecucion. Por consiguiente, las secuencias son similares a arrays dinamicos o flexibles





Registros

Un registro puede contener elementos datos agregados y primitivos. Cada elemento agregado, eventualmente, se descompone en campos formados por elementos primitivos, Un registro se puede considerar como un tipo o colección de datos de tamaño fijo. Al contrario que en los arrays, en los que todos sus elementos deben ser del mismo tipo de datos, los campos de los registros pueden ser de diferentes de datos. A los campos de los registros se accede mediante identificadores.


Ejemplo 1 Entrada y salida de datos en java


El código fuente:

Clase principal:
public class Ejemplo1 {
    
   public static void main(String[] a3d) {
        Datos objeto  = new Datos();
     objeto.obtenerCaracter();
     objeto.mostrarDato();
//   objeto.obtenerFlujo();
//   objeto.mostrarDatos();
    }
}
Clase Datos:
public class Datos {
 
    // atributos globales
      private static char flujo;//variable temporal que recibe el dato
      private String linea = null; 
    
       
       //metodo para obtener Un caracter.
       public void obtenerCaracter(){
       System.out.println("Ingresar un dato");
           try {
               flujo=(char) System.in.read();// se castea para pertenecer al mismo tipo de variable
           } catch (IOException ex) {
               Logger.getLogger(Datos.class.getName()).log(Level.SEVERE, null, ex);
           }
       
       }
    //metodo para obtner flujo
    public void obtenerFlujo(){
         
   
    InputStreamReader Flujo_bytes= new InputStreamReader (System.in);
    BufferedReader entrada= new BufferedReader (Flujo_bytes);
    System.out.println("Ingresar un flujo de datos");  
      // System.out.flush();
           try {
             
               //       
                           linea= entrada.readLine();
           } catch (IOException ex) {
               Logger.getLogger(Datos.class.getName()).log(Level.SEVERE, null, ex);
           }
       
        
        
    }
    public void mostrarDatos(){
    System.out.println("Dato ingresado: "+linea);   
    }
    
     public void mostrarDato(){
    System.out.println("Dato ingresado: "+flujo);   
    }

}

lunes, 6 de mayo de 2013

Flujo de datos en java

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikvUAFmJVseJ4vGsBY8_fwBZvwUSZmjEVTendHw3ndL-fXZuoaDlNAtvGhSDrdrMdC55u2a6BaWJ20DloHV1Ziwc7a8GrOiAA3vbtFqeJJ-yq2NaBf6Frr10Zmz_kxjV3AsNHI48NEkheq/s1600/Flujo+de+datos.jpg
 Para introducirnos en el amplio mundo  de la programación   hablaremos de la importancia del manejo de los datos entrada y salida de los mismos, ya que esto es solo una muestra de lo que veremos el resto  de nuestras próximas publicaciones, el uso adecuado de los datos.
Es decir,  con la finalidad de comprender las funciones, mostrare código fuente  para que puedan analizar y usar en sus proyectos.
Por supuesto que se dará una breve explicación del funcionamiento y su implementacion.

Entrada y salida de datos en java ( Teclado y pantalla)

Lo que debemos saber de entrada de datos.
En la mayoría de casos la fuente de entrada de datos es el teclado  y la fuente de salida de datos es la pantalla.
La entrada y salida estándar son flujos de datos que actúan como canales de comunicación permitiendo la interacción entre un programa y su entorno en el sistema. En Java podemos tener acceso a estos flujos de datos desde la clase
java.lang.System.

La clase System define un objeto de la clase BufferedIputStream, cuya referencia viene dada  por in. El objeto esta asociado al flujo estándar de entrada, que por defecto  es el teclado. Los elementos  básicos de este flujo  son caracteres individuales , no cadenas como ocurre con el objeto out. Entre los métodos de las clase se encuentra  read(), que devuelve el carácter actual en el  buffer de  entrada (solamente 1 carácter).

Los Buffer son Espacios de memoria principal que se reservan para el almacenamiento intermedio de datos procedentes o con destino a los periféricos. Los dos esquemas más usuales de reserva de zonas que incorporan los Sistemas Operativos para mejorar su rendimiento son el buffer simple y el buffer doble.

Lo que debemos saber de salida de datos.
El objeto out definido en la clase System esta asociado con el flujo de salida, que dirige los datos a consola y permite visualizar en la pantalla de su equipo.

System.out  es una referencia a un objeto de la clase PrintStream, el cual contiene los métodos esenciales para mostrar la salida de datos por pantalla a través de un  buffer. Entre ellos tenemos:
print(); Transfiere una cadena de caracteres al buffer de la pantalla.
println(); Transfiere una cadena de caracteres y el caracter de fin de linea al buffer de la pantalla.
flus();  El buffer con las cadenas almacenadas se vuelcan en pantalla.

Ejemplo 1:
El código siguiente es un ejemplo simple de entrada de datos desde la consola.
Pero hacemos énfasis en el concepto anterior, donde explica que con el metodo  read(), solamente obtendremos un solo carácter.

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class EDDSimples {
    private static char flujo;//variable temporal que recibe el dato

    public static void main(String[] args) {
        System.out.println("Ingresar un dato");
        try {
            flujo=(char) System.in.read();// se castea para pertenecer al mismo tipo de variable
        } catch (IOException ex) {
            Logger.getLogger(EDDSimples.class.getName()).log(Level.SEVERE, null, ex);
        }
        
           System.out.println("El dato ingresado: "+flujo);
    }
}

Resultado del primer ejemplo


Ejemplo 2:
El código siguiente es un ejemplo simple de entrada de datos desde la consola.
Ahora no  recaudaremos un solo carácter  sino que  obtendremos todos los datos encontrados en una linea. Usando InputStreamReader se obtiene el flujos de bytes y es trasladado a flujos de caracteres.

BufferedReader Crea un flujo de caracteres de entrada de búfer que utiliza una memoria intermedia de entrada de tamaño predeterminado.
La variable linea solo obtiene la conversión de bytes a cadenas de caracteres.


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;

public class EDDSimples {
    

   public static void main(String[] args) {
        
    String linea = null;   
    InputStreamReader Flujo_bytes= new InputStreamReader (System.in);
    BufferedReader entrada= new BufferedReader (Flujo_bytes);
    System.out.println("Ingresar un flujo de datos");    
    System.out.flush();
        try {
            linea= entrada.readLine();
        } catch (IOException ex) {
            Logger.getLogger(EDDSimples.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        System.out.println("Dato ingresado: "+linea);   
    }
}


Salida del ejemplo 2

viernes, 3 de mayo de 2013

Tipo de datos simples o primitivos


https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYo39Kq2EXrL_bDRHFmFl1FDnlnzQcqeEcBHBo56KbriDqL0x2PjxefozlK4F7PmnWC5gNRV2Q4ekWovDwaTyyAON-8Z5VUQq0zXmqkF8UgwVdV7CNjU0p2CNT91j__tSRzc7S5C7bWFXF/s1600/Esquema+de+datos+simples.jpg«La mayoría de los buenos programadores programan no porque esperan que les paguen o que el público los adore, sino porque programar es divertido.»

-Linus Torvalds

 En el  desarrollo de software los equipos informáticos se han convertido en una herramienta imprescindible en las empresas actuales, desde las grandes hasta las muy pequeñas, incluyendo a los trabajadores autónomos  disponen de un equipo informático que les ayuda en su proceso productivo de la información  Por lo que los datos se han convertido en algo muy importante, su gestión y su resguardo  es de gran interés de los desarrolladores.

Hay solamente cuatro diferentes tipos de datos que consideramos mas simples o primitivos. Otros tipos de datos son tipos que representan datos mas complejos. Los tipos tienen que ver con la clase de dato, una variable puede alojar y determinar que clase de operaciones se pueden desarrollar con el dato alojado en ella.

Datos primitivos o fundamentales

Lo que debemos saber

El dato es una representación simbólica (numérica, alfabética  algorítmica), un atributo o característica de una entidad. Los datos describen hechos empíricos, sucesos y entidades.

 Carácter: Frecuentemente se les conoce como Char, porque generalmente los lenguajes de programación están en ingles. Este tipo de dato representa a los caracteres simples, como 'd'. Un tipo de dato complejo que se deriva del tipo carácter  es aquel que reúne mas de un carácter y forma palabras o frases, se llama tipo cadena o string. Ejemplo: la variable nombre Empleado de tipo string puede alojar el dato  "Hola mundo".

Booleano: Los valores booleanos son valores lógicos y pueden ser falso o verdadero. En estos valores se indica el verdadero con el numero 1 y el falso con el 0.  

Entero: Los enteros están entre los tipos de datos mas utilizados en los lenguajes de programación  Hay diferentes clases de números enteros y difieren por el tamaño de ellos, incluyendo enteros cortos y enteros largos. Por ejemplo, en Java, los enteros cortos se alojan en 8 bits, mientras que los enteros de tipo largo, ocupan hasta 64 bits de longitud. Los números enteros son positivos y negativos, por ejemplo -15 y 1000. Notemos que no tienen punto decimal.

Real( Float): Los números reales son números con parte decimal, por ejemplo -10.0, 113288.0 y 12.45. Sin embrago, hay lenguajes de programación como NetLogo, que no hacen diferencia entre numeros enteros y reales cuando son exactos, como el caso de 1 y 1.0.









Tipos de datos en java

Para java los tipos de datos simples representan  valores escalares, valores individuales, como pueden ser char o los enteros. Java no soporta un gran numero de tipos de datos predefinidos, pero tiene la capacidad para crear sus propios tipos de datos a partir de la construcción class. 
Estos son los principales tipos de datos básicos en java, sus tamaños en bytes y el rango de valores que puede almacenar.



Los tipos fundamentales en java son:
Entero: (números completos y sus negativos) de tipo int.
Variantes de enteros: Tipos byte, short y long.
Reales números decimales: tipo float, double.
Caracteres: letras, dígitos, símbolos y signos de puntuación.
Bolean: true y false.

Clasificaciones en los tipos de datos





«La mayoría de los buenos programadores programan no porque esperan que les paguen o que el público los adore, sino porque programar es divertido.»
-Linus Torvalds



Existen muchas clasificaciones para los tipos de datos. Una de estas es la siguiente:


Dinámicos 

Estáticos 
         El tipo cadena 
         Estructurados 
         Simples 
                  Ordinales 
                  No-ordinales 


Tipos estáticos
Casi todos los tipos de datos son estáticos, la excepción son los punteros. Que un tipo de datos sea estático quiere decir que el tamaño que ocupa en memoria no puede variar durante la ejecución del programa. Es decir,una vez declarada una variable de un tipo determinado, a ésta se le asigna un trozo de memoria fijo, y este trozo no se podrá aumentar ni disminuir.

Tipos dinámicos.
Dentro de esta categoría entra solamente el tipo puntero. Este tipo te permite tener un mayor control sobre la gestión de memoria en tus programas. 


De acuerdo con la forma en que los datos se organizan, se clasifican en:
Tipos de datos simples.
Tipos de datos estructurados.


Tipos simples

Como su nombre indica son los tipos básicos. Son los más sencillos y los más fáciles de aprender. Los tipos simples más básicos son:entero,lógico,carácter y real. Y la mayoría de los lenguajes de programación los soportan, no como ocurre con los estructurados que pueden variar de un lenguaje a otro.

Tipos estructurados

Mientras que una variable de un tipo simple sólo referencia a un elemento, los estructurados se refieren a colecciones de elementos. Las colecciones de elementos que aparecen al hablar de tipos estructurados son muy variadas: tenemos colecciones ordenadas que se representan mediante el tipo array, colecciones sin orden mediante el tipo conjunto, e incluso colecciones que contienen otros tipos, son los llamados registros.

Tipos ordinales

Dentro de los tipos simples, los ordinales son los más abundantes. De un tipo se dice que es ordinal porque el conjunto de valores que representa se puede contar  , es decir, podemos establecer una relación uno a uno entre sus elementos y el conjunto de los números naturales.Dentro de los tipos simples ordinales, los más importantes son:

El tipo entero.
El tipo lógico.
El tipo carácter.
Tipos no-ordinales

Simplificando, podríamos reducir los tipos simples no-ordinales al tipo real. Este tipo nos sirve para declarar variables que pueden tomar valores dentro del conjunto de los números reales. A diferencia de los tipos ordinales, los no-ordinales no se pueden contar. No se puede establecer una relación uno a uno entre ellos y los número naturales. 


Estructuras de Datos (Fundamentos)





«La mayoría de los buenos programadores programan no porque esperan que les paguen o que el público los adore, sino porque programar es divertido.»
-Linus Torvalds




  Saludos amigos hoy les publico una sintensis acerca de la importancia y el surgimiento de las estructuras de datos. 
La importancia de las computadoras radica fundamentalmente en su capacidad para
procesar información. Esta característica les permite realizar actividades que antes sólo
las realizaban los humanos.

 Con la aparición de los lenguajes de programación estructurados en la década de los 60, surge el concepto de tipo de datos (ing., data type), definido como un conjunto de valores que sirve de dominio de ciertas operaciones. Con el propósito de que la información sea procesada, se requiere que ésta se almacene en la memoria de la computadora. 


TIPOS DE DATOS
Definición : El tipo de un dato es el conjunto de valores que puede tomar durante el programa. Si se le intenta dar un valor fuera del conjunto seproducirá un error. La asignación de tipos a los datos tiene
dos objetivos principales:
Por un lado, detectar errores en las operaciones
Por el otro, determinar cómo ejecutar estas operaciones.




A mediados de la década de los 70 el concepto de tipo abstracto de datos (ing., abstract data type; abreviadamente, TAD ), que considera un tipo de datos no sólo como el conjunto de valores que lo caracteriza sino también como las operaciones que sobre él se pueden aplicar, juntamente con las diversas propiedades que determinan inequívocamente su comportamiento. 


Se puede definir un tipo abstracto de datos como un conjunto de valores sobre los que se aplica un conjunto dado de operaciones que cumplen determinadas propiedades. El calificativo "abstracto" no significa "surrealista" sino que proviene de "abstracción"  y responde al hecho de que los valores de un tipo pueden ser manipulados mediante sus operaciones si se saben las propiedades que éstas cumplen, sin que sea necesario ningún conocimiento ulterior sobre el tipo; en concreto, su implementación en la máquina es absolutamente irrelevante. 


La implementación de un TAD consiste en determinar una representación para los valores del tipo y en codificar sus operaciones a partir de esta representación, todo ello usando un lenguaje de programación convencional.










martes, 30 de abril de 2013

Instalación de Netbeans 7.3 en Ubuntu 13.04

Saludos:
Les comparto  un video de como instalar el Ide de desarrollo para  java, llamado Netbeans en su versión 7.3. En Ubuntu, de una forma general.



Código utilizado para instalación:
para convertirlo en un ejecutable 
chmod +x ./netbeans-7.3-linux.sh 
para instalar 
./netbeans-7.3-linux.sh

chmod +x ./netbeans-7.3-linux.sh 
./netbeans-7.3-linux.sh



Instalacion de Oracle JDK en Ubuntu 13.04 (Forma manual)


Saludos:
A continuación les dejo un instructivo, para instalar JDK en Ubuntu, de una forma general y muy sencilla.
En el se contiene 2 formas de instalación Manual y en linea.



 

Y les adjunto un vídeo  como seguir los pasos de la guía:

Instalación de Oracle JDK en Ubuntu 13.04 (forma en linea)

Saludos:
A continuación les dejo un instructivo, para instalar JDK en Ubuntu, de una forma general y muy sencilla.
En el se contiene 2 formas de instalación Manual y en linea.





Y les adjunto un vídeo como realizar la instalación siguiendo la guía:

lunes, 15 de abril de 2013

Base de Datos Relacionales (Fundamentos)

Afrontando retos, se alcanza el conocimiento



En este tema expondremos  el concepto general de modelo de datos, incidiendo en los conceptos de estática y dinámica de un modelo de datos.Posteriormente analizaremos de forma detallada el modelo de datos que emplean. Nos enfocaremos en   la estrecha relación que existe entre el elemento básico de este modelo, y el concepto matemático de relación.


 


Estructura de datos
Componentes: Entidades, atributos y vínculos.

Elementos y relaciones
Vínculos: 1 a 1, 1 a muchos, muchos a muchos

ESTRUCTURA DE UNA BASE DE DATOS

Una Base de Datos está compuesta por un conjunto de tablas o archivos. Para una mayor comprensión




Entidad
Representa cualquier objeto distinguible en un modelo de negocios que se debe representar en la base de datos


Atributos
Es toda unidad fundamental que describe un dato.


Clases de atributo:
Obligatorio (NOT NULL, *)
Opcional (NULL, °)



Tupla
Es el conjunto de atributos que describen una entidad.



La información almacenada en cada uno de estos archivos se conoce con el nombre de Entidad. Por lo tanto una entidad es cualquier persona, cosa o evento, real o imaginario, de interés para la organización y acerca del cual se capturan, almacenan o procesan datos.
Además, cada uno de estos archivos está formado por un conjunto de registros que describe, a través de losatributos o datos (columna), cada entidad en él almacenado. Un atributo es pues, cualquier detalle que sirve para identificar, clasificar, cuantificar o expresar el estado de una entidad.
Todos los registros de un archivo, identificados por las filas de cada tabla, poseen el mismo formato, o sea tienen el mismo conjunto de datos o atributos, identificados por las columnas, que describen a las entidades.
En otras palabras los registros están formados por un conjunto de datos almacenados en los campos de cada atributo; y cada registro debe contener el conjunto de atributos necesarios, para describir completamente cada entidad sobre la cual una organización necesita almacenar y obtener información.


TIPOS DE ARCHIVO

Los archivos pueden clasificarse en cuatro tipos básicos; que son: los archivos maestros, los archivos de transacciones, los archivos de control y los archivos de planeamiento. Esta clasificación dependerá de la relación lógica que tengan que tener los datos, para dar apoyo a la actividad de la organización.
ARCHIVO MAESTRO
Un archivo maestro es un conjunto de registros que se refieren a algún aspecto importante de las actividades de una organización, como por ejemplo el archivo de VENDEDORES. Un archivo maestro también puede reflejar la historia de los eventos que afectan a una entidad determinada, como es en el caso de un archivo HISTÓRICO DE VENTAS. Otros ejemplos son los archivos maestros de: PLAN DE CUENTAS; BANCOS, NÓMINA DEL PERSONAL, CLIENTES, VENDEDORES, PRODUCTOS, PROVEEDORES, COMPETIDORES.
ARCHIVO DE TRANSACCIONES.
Un archivo de transacciones es un archivo temporal que persigue básicamente dos propósitos; uno es el de acumular datos de eventos en el momento que ocurran, y el segundo propósito es el de actualizar los archivos maestros para reflejar los resultados de las transacciones actuales. En otras palabras, guardan información sobre los eventos que afectan a la organización y sobre los cuales se calculan datos; como es en el caso de los archivos de VENTAS, ORDENES DE PRODUCCIÓN o PAGO DE SALARIOS. Otros ejemplos de archivos de transacciones son los archivos de: REGISTROS CONTABLES, COSTOS, FACTURAS, PAGOS A RECIBIR, PROCESOS DE EXPORTACIÓN, CONSULTA DE CLIENTES, PEDIDOS DE CLIENTES Y PEDIDOS A PROVEEDORES.
ARCHIVOS DE CONTROL.
Los archivos de control contienen datos de los archivos maestros y de transacciones, para permitir el análisis del desempeño de la organización. Estos archivosgeneran medidas de control de los negocios, como ser el VOLUMEN DE VENTA POR PRODUCTO, VOLUMEN DE VENTA POR VENDEDOR, VOLUMEN DE VENTA POR CLIENTE, COMPRAS POR PROVEEDOR, COSTO DE REPOSICIÓN.
ARCHIVO DE PLANEAMIENTO.
Los archivos de planeamiento, contienen datos referentes a los niveles esperados de los datos existentes en los archivos maestros y de transacciones; como por ejemplo: PROGRAMA DE VENTAS, PROGRAMA DE COMPRAS, PROGRAMA DE PRODUCCIÓN; PRESUPUESTO FINANCIERO. Por lo tanto los datos existentes en un archivo de planeamiento provienen de los archivos maestros, de transacciones, y de control.


Clave principal y externa (foranea)


El índice con campo clave principal de una tabla es utilizado para buscar registros y crear combinaciones entre tablas.- No admite valores duplicados en los mismos,- El orden de los campos en una clave principal de múltiples campos determina el orden predeterminado de la tabla.- Si no se crea ninguna clave principal cuando se esta guardando la tabla aparecerá automáticamente- si se define Yes, creara un campo de tipo Auto numérico a la tabla y se establecerá dicho campo como clave principal, si se elige no, no se creara ninguna clave principal.

Es llamada clave Externa, es uno o mas campos de un tabla que hacen referencia al campo o campos de clave principal de otra tabla, una clave externa indica como esta relacionadas las tablas. Los datos en los campos de clave externa y clave principal deben coincidir, aunque los nombres de los campos no sean los mismos.- Los campos continuos se deben de marcos ambos campos y de la misma forma como se selecciona la Llave Primaria se debe de seleccionar la Llave Externa o Llave Foránea, utilizando el botón de Barra de Herramientas, Mouse o utilizando el Menú y la opción Edit.


Tipo de Relaciones


Entre dos tablas de cualquier base de datos relacional pueden haber dos tipos de relaciones, relaciones uno a uno y relaciones uno a muchos:



 Relación Uno a Uno: Cuando un registro de una tabla sólo puede estar relacionado con un único registro de la otra tabla y viceversa.
Por ejemplo: tenemos dos tablas una de profesores y otra de departamentos y queremos saber qué profesor es jefe de qué departamento, tenemos una relación uno a uno entre las dos tablas ya que un departamento tiene un solo jefe y un profesor puede ser jefe de un solo departamento.


 Relación Uno a Varios: Cuando un registro de una tabla (tabla secundaria) sólo puede estar relacionado con un único registro de la otra tabla (tabla principal) y un registro de la tabla principal puede tener más de un registro relacionado en la tabla secundaria, en este caso se suele hacer referencia a la tabla principal como tabla 'padre' y a la tabla secundaria como tabla 'hijo', entonces la regla se convierte en 'un padre puede tener varios hijos pero un hijo solo tiene un padre (regla más fácil de recordar).
Por ejemplo: tenemos dos tablas una con los datos de diferentes poblaciones y otra con los habitantes, una población puede tener más de un habitante, pero un habitante pertenecerá (estará empadronado) en una única población. En este caso la tabla principal será la de poblaciones y la tabla secundaria será la de habitantes. Una población puede tener varios habitantes pero un habitante pertenece a una sola población. Esta relación se representa incluyendo en la tabla 'hijo' una columna que se corresponde con la clave principal de la tabla 'padre', esta columna es lo denominamos clave foránea (o clave ajena o clave externa).
Una clave foránea es pues un campo de una tabla que contiene una referencia a un registro de otra tabla. Siguiendo nuestro ejemplo en la tabla habitantes tenemos una columna población que contiene el código de la población en la que está empadronado el habitante, esta columna es clave ajena de la tabla habitantes, y en la tabla poblaciones tenemos una columna codigo de poblacion clave principal de la tabla.

Relación Varios a Varios: Cuando un registro de una tabla puede estar relacionado con más de un registro de la otra tabla y viceversa. En este caso las dos tablas no pueden estar relacionadas directamente, se tiene que añadir una tabla entre las dos que incluya los pares de valores relacionados entre sí.
Por ejemplo: tenemos dos tablas una con los datos de clientes y otra con los artículos que se venden en la empresa, un cliente podrá realizar un pedido con varios artículos, y un artículo podrá ser vendido a más de un cliente.
No se puede definir entre clientes y artículos, hace falta otra tabla (por ejemplo una tabla de pedidos) relacionada con clientes y con artículos. La tabla pedidos estará relacionada con cliente por una relación uno a muchos y también estará relacionada con artículos por un relación uno a muchos

Inducción a Bases de Dato

Afrontando retos, se alcanza el conocimiento


Hola amigos les comparto estas experiencia y me encuentro con las bases de datos. Hace poco un buen amigo me pidió ayuda, necesitaba que le explicara algo sobre bases de datos, en mi pequeño mundo, lo pensé por un momento, puesto que estaba en el desarrollo de otras tareas de la Universidad. Desvelado desde hace una semana, accedí ayudarle. Sin embargo me encontré con ciertas dificultades:
  
Problema 1 . Desvelado y solo con las conocimientos posteriores comencé a diseñar la base de datos descrita por él.
Problema 2 . No tenia un enunciado preciso del problema, literalmente dijo: "Una farmacia, muestre informes de productos existentes "

Problema 3. Sistema de gestión de bases de datos, ni idea de como usar  Microsoft Access.


Así que confié nada mas en mis conocimientos adquiridos.
Para brindarle solución necesite hacer memoria de las principales características  fundamentos de las bases relacionales, por lo que les comparto mi marco teórico.

Introducción a las bases de datos relacionales


El término base de datos se ha decaido últimamente, perdiendo gran parte de su original significado. Para algunas personas, una base de datos es una colección de elementos de datos (teléfono,libros, listas de lavandería, rollos de pergamino. . . lo que sea). Otras personas definen el término más estricto. Es una herramienta organizadora, que funciona como bancos de informaciones que están relacionadas entre sí para que permitan el manejo de los datos,caracterizado por poser una auto-descripcion integradora de registros.
Un registro es una representación de un objeto físico o conceptual. Digamos, por ejemplo, que desea hacer un seguimiento de los clientes de una empresa. Se asigna un registro para cada cliente. Cada registro tiene varios atributos, como el nombre, dirección y número de teléfono. Nombres individuales, direcciones, etc son los datos.

Una base de datos consta de los datos y metadatos. Los metadatos son los datos que describe la estructura de datos dentro de una base de datos. Si sabes cómo sus datos está dispuesto, entonces usted puede recuperar. Debido a que la base de datos contiene una descripción de su propia estructura, es autodescriptivo. La base de datos está integrada por que incluye no sólo elementos de datos, sino también las relaciones entre los elementos de datos. Los metadatos de base de datos almacena en un área llamada el diccionario de datos, que describe las tablas, columnas, índices, restricciones y otros elementos que constituyen la base de datos.

¿Qué es un Sistema Gestión de Base de Datos (DBMS)?

Se trata de una herramienta capaz de visualizar y procesar datos espaciales, que se caracteriza por poseer una interfaz de usuario amigable, es un conjunto de programas que permiten el almacenamiento, modificación y extracción de la información en una base de datos, además de proporcionar funciones para añadir, borrar modificar y analizar los datos. Los usuarios pueden acceder a la información usando herramientas específicas de interrogación y de generación de informes, o bien mediante aplicaciones al efecto.
Muchos programas de DBMS están en el mercado hoy en día. Algunos funcionan sólo en la unidad central computadoras, algunos sólo en minicomputadoras, y algunas sólo en las computadoras personales.
Una fuerte tendencia, sin embargo, es para tales productos para trabajar en múltiples plataformas o en redes que contienen las tres clases de máquinas.

Arquitectura de 3 Capas




Lo tipos de Usuario:
  • Usuario Final
  • Programador de la aplicación
  • DBA 


(Administrador 
de base de datos responsable
 de los datos que se almacenan.)

Arquitectura
nivel físico: es el nivel más bajo de abstracción y el nivel real de los datos almacenados. Este nivel define cómo se  almacenan los datos en el soporte físico, ya sea en registros o de cualquier otra forma, así como los métodos de acceso. Este nivel lleva asociada una representación de los datos, que es lo que denominamos Esquema Físico.

nivel conceptual: es el correspondiente a una visión de la base de datos desde el punto de visto del mundo real. Es decir se trata con la entidad u objeto representado, sin importar como está representado o almacenado éste. Es la representación de los datos realizada por la organización, que recoge los datos parciales de los requerimientos de los diferentes usuarios y aplicaciones parciales. Incluye la definición de los datos y las relaciones entre ellos. Este nivel lleva asociado un Esquema Conceptual.

nivel de visión: son partes del esquema conceptual. El nivel conceptual presenta toda la base de datos, mientras que los usuarios, por lo general, sólo tienen acceso a pequeñas parcelas de ésta. El nivel visión es el encargado de dividir estas parcelas. Un ejemplo sería el caso del empleado de una organización que tiene acceso a la visión de su nómina, pero no a la de sus compañeros. El esquema asociado a éste nivel es el Esquema de Visión.

Modelo Relacional


Dr. EF Codd de IBM formuló por primera vez el modelo de base de datos relacional en 1970, y este modelo comenzó a aparecer en los productos sobre una década más tarde. Irónicamente, IBM no ha emitido el primer DBMS relacional. Esa distinción fue puesta en marcha por una pequeña empresa, que nombró a su productos Oracle. Bases de datos relacionales han sustituido a las bases de datos construidas de acuerdo con principios de modelos, porque el tipo relacional tiene atributos valiosos que distinguir bases de datos relacionales de los tipos de bases de datos.

Probablemente el más importante de estos atributos es que, en una base de datos relacional, puede cambiar la estructura de base de datos sin que requieran cambios en las aplicaciones que estaban sobre la base de las viejas estructuras.
Es un modelo creado por Codd, permite que los datos se estructuren a nivel lógico como tablas formadas por filas y columnas, aunque a nivel físico su estructura sea completamente distinta.


Continua este tema en el siguiente enlace:
Fundamentos de bases relacionales