Programación de Sistemas de Archivos Secuenciales con Objetos en Lenguaje C++

Documentos relacionados
USO DE SUBRUTINAS, TRANSMISIÓN DE PARÁMETROS Y COMPILACIÓN CONDICIONAL EN C++

Tema: Funciones Virtuales y Polimorfismo.

Tema: Funciones Virtuales y Polimorfismo.

PROGRAMACION ORIENTADA A OBJETOS EN C++

Clases y Objetos en C++

Tema: Funciones Virtuales y Polimorfismo.

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2

Programación Orientada a Objetos en C++

PNFSI. Asignatura: Desarrollo de Software. Tema 1: Programación Orientada a Objetos

CÓDIGO FUENTE PARA GRAFICAR LOS ESCUDOS DEL ITNL Y DE ISC EN LENGUAJE C++

La Herencia. La primera línea de cada declaración debe incluir la sintaxis siguiente:

Unidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores.

Los Constructores(1)

PROGRAMACIÓN EN C#.NET Programación Orientada a Objetos en C# Ing. Bruno López Takeyas

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Universidad Autónoma del Estado de Hidalgo Instituto de Ciencias Básicas e Ingeniería Área Académica de Computación y Electrónica

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION

Academia de computación de IE, ICA e ISISA. Unidad didáctica Programación Orientada a Objetos

Tipos Recursivos de Datos

RELACIÒN ENTRE LA PROGRAMACIÒN ORIENTADA A OBJETOS Y LA ESTRUCTURADA

Tema: Plantillas en C++.

Estructura de Datos Unidad 1: Repaso del Lenguaje Java

Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++

PARADIGMA DE POO - CLASES

Unidad Didáctica 5: Introducción a la Programación Orientada a Objetos

Conceptos Básicos. Programación Orientada a Objetos 2

12. Tipos de atributos

Tema: Punteros.Puntero this en C#.

MANEJO DEL MOUSE EN LENGUAJE C++

INTRODUCCIÓN A LA POO EN C++

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Tipos de Datos Recursivos

POO. Por tanto, una clase nos permite crear varios objetos que pueden realizar la misma función o funciones diferentes.

class identificador{ //Bloque de propiedades (datos miembro, atributos, propiedades) //Bloque de métodos (comportamientos) }

Guía práctica de estudio 07: Herencia

Programación orientada a objetos I

Programación orientada a objetos. Introducción

Programación orientada a objetos II

Declaración de una clase

POO: Clases y objetos

IMPLEMENTACIÓN DE CONCEPTOS P.O.O. EN JAVA

Programación Orientada a Objetos en C#.NET CAPÍTULO 8 DELEGADOS. Ing. Bruno López Takeyas, M.C.

Tema VII POO y lenguajes de programación no Orientados a Objetos (R-1.1)

Tema 3: Programación orientada a objetos (I)

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

2. Indica cuál de las siguientes afirmaciones es cierta:

Tema: Clases y Objetos en C#. Parte II.

o Una clase en Java se compone de: o A los anteriores se les conoce también como miembros de la clase.

Programación Orientada a Objetos. Orientación a Objetos en Java

Un registro o estructura es un conjunto de n elementos heterogéneos que están agrupados bajo un único nombre (en una sola variable).

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS COORDINACION DE COMPUTACION

Tema: Herencia en C#.

INTERACCION ENTRE OBJETOS

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

Introducción al Lenguaje "C++"

Programación de Computadores 7 Objetos y Clases. Prof. Javier Cañas R. Universidad Técnica Federico Santa María Departamento de Informática.

PUNTEROS (APUNTADORES)

Tema: Herencia en C#.

U.A.B.C. Facultad de Ingeniería Programación Estructurada UNIDAD III

Programación Orientada a Objetos

Herencia. Implementación en Java

Programación C++ (1 Parte) Dr. Oldemar Rodríguez Rojas Escuela De Informática Universidad Nacional

18. Interfaces Declaración de una interfaz

TEMA 3:Programación con Clases y Objetos.

Cómo implementar tus propias funciones en Lenguaje C?

PHP orientado a objetos:

NETBEANS JAVA PROGRAMACIÓN ORIENTADA A OBJETOS

Elementos de un programa en C

ARTÍCULO: IMPLEMENTACIÓN DE MÉTODOS EN C#.NET

Formatos para prácticas de laboratorio

Lenguaje C, tercer bloque: Funciones

Lenguaje de Programación

! Fundamentos de la POO. ! Comportamiento y estado. ! Clases y objetos en Java

CAPÍTULO 6 COMPOSICIÓN Y AGREGACIÓN

Programación Orientada o Objetos

Subrutinas o Funciones

Programación orientada a Objetos (POO) La POO está compuesta por una serie de elementos que se detallan a continuación.

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION

Índice. Estructuras de datos en Memoria Principal. Vectores. Matrices. Cadenas de caracteres. Estructuras. Estructuras de datos en Memoria Externa

CAPÍTULO 2 DISEÑO E IMPLEMENTACIÓN DE MÉTODOS EN C#

Introducción a Java. Dr. (c) Noé Alejandro Castro Sánchez

Guía práctica de estudio 04: Tipos de clase

El lenguaje C++ A partir del lenguaje C Entorno de programación Visual C++

Cómo se estructura un programa en C#? Qué son las clases y los objetos? Cómo se estructuran los dibujos de AutoCAD?

UNIDAD CURRICULAR: ALGORITMICA Y PROGRAMACIÓN UNIDAD IX. ESTRUCTURAS DE REGISTROS

Introducción al Lenguaje de Programación C

Programación Orientada a Objetos Profr. Pedro Pablo Mayorga

Tema 2: Programación basada en Objetos

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

Tema: Punteros: Puntero this en C#.

Procesadores de lenguaje Tema 6 La tabla de símbolos

Tema: Punteros a Objetos. Puntero this.

Tipos de Datos Simples Contenido del Tema

Algoritmos y estructuras de datos

Transcripción:

Programación de Sistemas de Archivos Secuenciales con Objetos en Lenguaje C++ Bruno López Takeyas Resumen Este documento presenta una alternativa de programación de sistemas de archivos secuenciales mediante la técnica orientada a objetos y está dirigido a programadores interesados en diseñar sistemas de administración de archivos cuyo objetivo es facilitar su comprensión y posterior codificación Como ejemplo de aplicación se describe el diseño y codificación de un archivo secuencial que almacena registros de empleados de una empresa Palabras Clave Programación orientada a objetos, archivo, registro, clase, objeto, atributo, constructor E I INTRODUCCIÓN XISTEN varias técnicas para representar y almacenar registros llamadas organizaciones de archivos Hay dos aspectos importantes en que difieren las organizaciones de archivos: la secuenciación de registros y el conjunto de operaciones para manipularlos [1] La forma más sencilla de almacenar un conjunto de registros en un archivo es mediante la organización secuencial En este tipo de archivos, los registros son escritos consecutivamente cuando el archivo es creado, por lo tanto, deben ser accesados de ese modo cuando se consultan La característica mas importante de esta técnica de organización de archivos es que solo permite el acceso secuencial, es decir, para accesar al registro k, se deben recorrer los k-1 registros anteriores Esta característica impide que el archivo secuencial se use en procesos en línea debido a que no se pueden consultar rápidamente los registros, sin embargo, muestra buen rendimiento en procesos en lote donde se aprovecha la capacidad para accesar al siguiente registro rápidamente Otra ventaja de esta organización de archivos radica en que la dirección del registro esta implícita en el sistema; es decir, no se pierden registros por la desaparición de direcciones Es posible programar sistemas de archivos mediante lenguajes de tercera generación (como el lenguaje C++) para aplicaciones relativamente sencillas y como antecedente teórico-práctico del uso de manejadores de bases de datos robustos Sin embargo, es recomendable aprovechar las técnicas de programación de estos lenguajes para facilitar el Bruno López Takeyas es profesor del Depto de Sistemas y Computación del Instituto Tecnológico de Nuevo Laredo, Nuevo Laredo, Tam MÉXICO (Tel: 01 (867) 7140022; e-mail: takeyas@itnuevolaredoedumx) diseño y codificación de dichas aplicaciones II FUNDAMENTOS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN LENGUAJE C++ La programación orientada a objetos (POO) simula objetos reales con equivalentes de software Utiliza las relaciones de clase en la que sus objetos tienen las mismas características, atributos y comportamientos La POO encapsula datos (atributos) y métodos (comportamientos) en paquetes llamados clases Las clases tienen la propiedad de ocultamiento, esto es, que aunque los objetos se comunican entre sí por medio de interfaces bien definidas, normalmente no se les permite saber la manera en que se implementan en otros objetos La diferencia entre clase y objeto es sutil pero importante La clase es el concepto abstracto, es una especie de molde para crear objetos, define los atributos y métodos Por otro lado, el objeto es la entidad concreta; es decir, a partir de una clase, se pueden crear instancias u objetos donde cada uno tiene valores distintos para sus atributos [2] Mientras que en lenguaje C y otros lenguajes procedimentales, la programación esta orientada a funciones y procedimientos, en lenguaje C++ esta orientada a objetos En C, la unidad de programación es la función, mientras que en C++ es la clase, a partir de la cual los objetos son instanciados [3] La clave para desarrollar sistemas utilizando los conceptos de orientación a objetos es definir los objetos que lo forman, sus atributos, sus métodos y crear las abstracciones apropiadas para ellos (clases), separando la implementación interna de su comportamiento externo La abstracción consiste en ocultar los detalles irrelevantes del objeto, esto provoca que el usuario maneje los datos del objeto sin necesidad de conocer los detalles A Partes públicas y privadas de las clases Una clase puede tener partes públicas y privadas Regularmente los componentes de las clases son privados, esto significa que no pueden ser accesados desde afuera de la clase, sino únicamente por los métodos de la misma Estos componentes se declaran con la palabra private [3] Los elementos públicos de la clase pueden ser accesados desde afuera de la clase, pueden consultar sus componentes privados y se declaran con la palabra public (Fig 1)

2 class Nombre_Clase // declaración de atributos y métodos públicos ; // declaración de atributos y métodos privados Fig 1 Formato para declarar una clase constructor tiene las siguientes características: Tiene el mismo nombre que la clase No tiene definido el tipo del valor de retorno El constructor puede o no tener parámetros Cuando se declara un objeto cuya clase tiene un constructor con parámetros, debe usarse el formato de declaración mostrado en la Fig 4 B Funciones para asignar y consultar valores de los atributos del objeto Regularmente las clases contienen métodos para asignar y consultar valores de sus atributos A los métodos para introducir valores se les llama mutators mientras que los métodos para accesar los valores de los atributos son conocidos como accesors C Declaración de los métodos de una clase Normalmente los métodos son declarados como partes públicas de las clases y son los únicos que tienen derecho a acceder las partes privadas de la misma (atributos) y deben declararse como funciones o procedimientos de la clase (Fig 2) class Nombre_Clase ; // declaración del constructor Nombre_Clase(lista_parametros); // declaración de métodos públicos tipo Nombre_metodo1(lista_parametros); tipo Nombre_metodo2(lista_parametros); // declaración de atributos privados tipo atributo1; tipo atributo2; Fig 2 Formato para declarar una clase, sus métodos y sus atributos Nótese que en esta declaración no se desarrolla la codificación completa de los métodos, sino ésta debe hacerse aparte usando un formato en el que se tiene que especificar la clase al que pertenece (Fig 3) tipo Nombre_Clase::Nombre_metodo(lista_parametros) estatutos; Fig 3 Formato para codificar los métodos D Constructores Es muy común que algunos atributos del objeto deban ser inicializados antes de utilizarlos Para ello se utiliza el constructor, el cual es una función especial que pertenece a la clase y se ejecuta automáticamente cuando se crea una instancia de la clase, es decir, cuando se declara un objeto El Nombre_Clase Nombre_objeto(lista_parametros); Fig 4 Formato para declarar un objeto con parámetros E Declaración de registros En lenguaje C++, los registros se declaran por medio de la sentencia struct En él se definen los campos que lo forman utilizando la declaración de los tipos de datos tradicionales que proporciona el lenguaje (int, char, float, double, long, etc) Aquí se declaran los datos del registro que posteriormente se grabarán en el archivo (Fig 5) struct tipo_registro // Declaración de los campos del registro tipo campo1; tipo campo2; ; Fig 5 Formato para declarar un tipo de registro III DISEÑO DE SISTEMAS DE ARCHIVOS CON OBJETOS Para ilustrar mejor la programación de archivos con objetos, se muestra el diseño de un sistema de un archivo secuencial en el que se requiere almacenar datos de empleados de una empresa En este ejemplo de aplicación se hacen las declaraciones del registro y la clase para la manipulación del archivo de empleados Primero se definen los datos o campos que se desean almacenar y se desarrollan los métodos de altas y listado de registros A Declaración del registro de empleados Los datos (campos) requeridos para los registros de empleados son mostrados en la Fig 6 Campo Descripción Tipo Formato Num Número de Entero empleado Nombre Nombre Alfanumérico 25 caracteres Depto Departamento Caracter Sueldo Sueldo Real 42 Fig 6 Campos del registro de Empleados La declaración de la estructura del registro de Empleados se hace de ámbito global y se muestra en la Fig 7

struct tipo_registro int num; char nombre[25]; char depto; float sueldo; ; Fig 7 Declaración global del tipo de registro y sus campos B Declaración de la clase Una vez declarada la estructura global que define los campos del registro, se declara la clase Archivo_Secuencial que contiene los métodos y atributos del archivo secuencial (Fig 8) class Archivo_Secuencial Archivo_Secuencial(char *nom); // Constructor void Altas();//Método para insertar registros void Listado(); //Método para enlistar ; struct tipo_registro registro; FILE *alias; // Alias del archivo char *nombre_archivo;// Nombre del archivo Fig 8 Declaración global de la clase del archivo secuencial de empleados La clase del archivo secuencial tiene tres atributos privados: 1 El registro con los campos de los empleados 2 El apuntador alias que controla el archivo 3 El nombre del archivo que contiene la ruta de acceso Además se declaran sus métodos públicos: 1 El constructor Archivo_Secuencial que recibe como parámetro el nombre del archivo 2 El método Altas() para insertar registros con los datos de los empleados 3 El método Listado() para mostrar en la pantalla los datos de todos los empleados almacenados en el archivo D Desarrollo del método Altas() en el objeto del archivo secuencial El método Altas() declarado en la clase del archivo secuencial tiene como finalidad insertar secuencialmente los registros de empleados en el archivo del objeto (Fig 10) void Archivo_Secuencial::Altas() int num; if((alias=fopen(nombre_archivo,"rb+"))==null) alias=fopen(nombre_archivo,"wb"); cout << "\n<<< ALTAS >>>"; cout << "\n\n\nno de Ctrl: "; cin >> num; alias=fopen(nombre_archivo,"rb+"); if(alias==null) alias=fopen(nombre_archivo,"wb"); while(!feof(alias)) if(registronum==num) cout << "\n\n\nya existe ese registro!!!"; continuar"; registronum=num; cout << "\nnombre: "; gets(registronombre); cout << "\ndepto : "; cin >> registrodepto; cout << "\nsueldo: "; cin >> registrosueldo; fwrite(&registro,sizeof(registro),1,alias); cout << "\n\ndatos registrados!!!"; continuar"; Fig 10 Método para insertar secuencialmente los registros de empleados C Desarrollo del constructor del archivo secuencial Una manera de inicializar el objeto del archivo secuencial es definiendo el nombre del archivo que manipulará Para ello, se define un constructor que acepta como parámetro una cadena de caracteres con la ruta y nombre del archivo (Fig 9) Archivo_Secuencial::Archivo_Secuencial(char *nom) // Inicializar el nombre del archivo strcpy(nombre_archivo,nom); Fig 9 Constructor del archivo secuencial Aquí el constructor se diseña como un procedimiento que acepta una cadena definida como un apuntador de caracteres y lo copia o inserta en el atributo del nombre del archivo del objeto; es decir, se establece el nombre del archivo del objeto E Desarrollo del método Listado() en el objeto del archivo secuencial El método Listado() declarado en la clase del archivo secuencial tiene como finalidad enlistar todos los registros de empleados en el archivo del objeto (Fig 11) void Archivo_Secuencial::Listado() if((alias=fopen(nombre_archivo,"rb+"))==null) cout << "Error: No existe el archivo "; continuar"; cout << "\n<<< LISTADO >>>";

4 cout << "\n\n\nnoctrl Nombre Dep Sueldo "; cout << "\n================================================= ==="; while(!feof(alias)) printf("\n%5d %25s %c $%82f ",registronum,registronombre,registrodepto,regis trosueldo); cout << "\n\n\nfin de listado"; continuar"; Fig 11 Método para enlistar los registros de empleados F Declaración del objeto de empleados Una vez hecha la declaración de la clase y desarrollado su constructor y sus métodos, se procede a declarar en forma global el objeto Empleados perteneciente a la clase Archivo_Secuencial Como el constructor de la clase espera una cadena como parámetro, es necesario incluir la ruta y el nombre del archivo en la declaración del objeto (Fig 12) Archivo_Secuencial Empleados("c:\\EMPLEADODAT"); Fig 12 Declaración del objeto Empleados de la clase Archivo_Secuencial G Llamadas a los métodos del objeto de Empleados Para insertar registros de empleados en el archivo secuencial, basta con invocar o llamar el método de Altas() Para lograrlo, es necesario especificar el objeto al que se hace referencia, ya que las características de la clase Archivo_Secuencial pueden ser heredadas a varios objetos (Fig 12) EmpleadosAltas(); Fig 12 Llamada del método Altas() para insertar registros en el archivo secuencial del objeto Empleados De forma semejante, se invoca el método Listado() para enlistar en pantalla todos los registros del archivo de Empleados EmpleadosListado(); Fig 13 Llamada del método de Listado() para mostrar en pantalla todos los registros del archivo secuencial del objeto Empleados H Menú principal del sistema En la rutina principal del sistema, se codifica un menú que muestra las opciones y se invocan los métodos correspondientes (Fig 14) int main() int op; do cout << "Programa de manejo de archivos secuenciales con objetos\n\n"<<endl; cout << "1- Altas"<<endl; cout << "2- Listado"<<endl; cout << "0- Salir"<<endl; cout << "\n\n\nopcion? "; cin >> op; switch(op) case 1: EmpleadosAltas(); break; case 2: EmpleadosListado(); break; while(op!=0); return 0; Fig 14 Rutina principal del sistema IV CONCLUSIONES La POO es una técnica de programación sumamente eficiente que permite dar versatilidad a los sistemas y facilitar la codificación para los programadores En la aplicación de archivos secuenciales mostrada en este documento, fácilmente se pueden agregar otros archivos sin necesidad de reprogramar las subrutinas o agregar nuevos procedimientos Para crear otros archivos secuenciales con las mismas características, basta declarar otros objetos de la misma clase con la ruta y nombre de los archivos deseados P ejem Si se deseara un archivo secuencial de Secretarias y otro de Obreros, se hace la declaración correspondiente de los objetos y se encuentran listos para ser utilizados (Fig 15) Archivo_Secuencial Secretarias("c:\\SECREDAT"); Archivo_Secuencial Obreros("d:\\OBREROSDAT"); Fig 15 Declaración de nuevos objetos de archivos secuenciales Esta declaración permite que estos dos nuevos objetos hereden las características de la clase a la que pertenecen y por lo tanto ya tienen declarados los métodos y atributos listos para ser utilizados El código fuente del sistema mostrado en este documento puede descargarse accesando el sitio web http://wwwitnuevolaredoedumx/takeyas o solicitándolo enviando un correo electrónico al autor, escribiendo a takeyas@itnuevolaredoedumx

REFERENCIAS [1] López Takeyas, Bruno Conceptos básicos de administración de archivos Artículo ITNL 2003 http://wwwitnuevolaredoedumx/takeyas [2] Lafore, Robert Object-Oriented Programming in Turbo C++ Waite Group 1994 [3] Deitel/Deitel C++ Cómo programar 4a edición Editorial Pearson Prentice Hall 2003 [4] Lafore, Robert Turbo C Programming for the PC Waite Group 1990 [5] López Takeyas, Bruno Manual de manejo de archivos en Lenguaje C++ Apuntes ITNL 2004 http://wwwitnuevolaredoedumx/takeyas [6] Staugaard, Andrew Técnicas estructuradas y orientadas a objetos Una introducción utilizando C++ Addison Wesley 1995 Bruno López Takeyas se tituló de Ingeniero en Sistemas Computacionales en el Instituto Tecnológico de Nuevo Laredo en 1993 Obtuvo el grado de Maestro en Ciencias de la Administración con especialidad en Sistemas en la Universidad Autónoma de Nuevo León en el año 2000 Desde 1994 es profesor del Depto de Sistemas y Computación del Instituto Tecnológico de Nuevo Laredo Es autor de varios artículos en las áreas de programación, algoritmos genéticos e inteligencia artificial