Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


programacion orientadaa objetos, Apuntes de Informática

Asignatura: programación I, Profesor: , Carrera: Ingeniería en Informática, Universidad: UVIGO

Tipo: Apuntes

2015/2016

Subido el 24/11/2016

mellen-2
mellen-2 🇪🇸

5

(9)

31 documentos

1 / 250

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Programación Orientada a objetos. 1
Capitulo I
Programación Orientada a Objetos
La programación orientada a objetos, ha tomado las mejores ideas de la
programación estructurada y los ha combinado con varios conceptos nuevos y potentes que
incitan a contemplar las tareas de programación desde un nuevo punto de vista. La
programación orientada a objetos, permite descomponer mas fácilmente un problema en
subgrupos de partes relacionadas del problema. Entonces, utilizando el lenguaje se pueden
traducir estos subgrupos a unidades autocontenidas llamadas objetos.
El término Programación Orientada a Objetos (POO), hoy en día ampliamente
utilizado, es difícil de definir, ya que no es un concepto nuevo, sino que ha sido el
desarrollo de técnicas de programación desde principios de la década de los setenta, aunque
sea en la década de los noventa cuando ha aumentado su difusión, uso y popularidad. No
obstante, se puede definir POO como una técnica o estilo de programación que utiliza
objetos como bloque esencial de construcción.
Un objeto es una unidad que contiene datos y las funciones que operan sobre esos
datos. A los elementos de un objeto se les conoce como miembros; las funciones que
operan sobre los objetos se denominan métodos y los datos se denominan miembros datos.
1.1 ORIGENES DE LA PROGRAMACION ORIENTADA A OBJETOS.
1.a Etapa. Lenguajes Ensambladores. La unidad de programación es la instrucción,
compuesta de un operador y los operandos. El nivel de abstracción que se aplica es muy
bajo.
2.a Etapa. Lenguajes de Programación: Fortran, Algol, Cobol. Los objetos y operaciones
del mundo real se podían modelar mediante datos y estructuras de control separadamente.
En esta etapa el diseño del software se enfoca sobre la representación del detalle
procedimental y en función del lenguaje elegido. Conceptos como: refinamiento
progresivo, modularidad procedimientos y programación estructurada son conceptos
básicos que se utilizan en esta etapa. Existe mayor abstracción de datos.
3.a Etapa. Se introducen en esta etapa los conceptos de abstracción y ocultación de la
información.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Vista previa parcial del texto

¡Descarga programacion orientadaa objetos y más Apuntes en PDF de Informática solo en Docsity!

Capitulo I

Programación Orientada a Objetos

La programación orientada a objetos, ha tomado las mejores ideas de la programación estructurada y los ha combinado con varios conceptos nuevos y potentes que incitan a contemplar las tareas de programación desde un nuevo punto de vista. La programación orientada a objetos, permite descomponer mas fácilmente un problema en subgrupos de partes relacionadas del problema. Entonces, utilizando el lenguaje se pueden traducir estos subgrupos a unidades autocontenidas llamadas objetos.

El término Programación Orientada a Objetos (POO), hoy en día ampliamente utilizado, es difícil de definir, ya que no es un concepto nuevo, sino que ha sido el desarrollo de técnicas de programación desde principios de la década de los setenta, aunque sea en la década de los noventa cuando ha aumentado su difusión, uso y popularidad. No obstante, se puede definir POO como una técnica o estilo de programación que utiliza objetos como bloque esencial de construcción.

Un objeto es una unidad que contiene datos y las funciones que operan sobre esos datos. A los elementos de un objeto se les conoce como miembros; las funciones que operan sobre los objetos se denominan métodos y los datos se denominan miembros datos.

1.1 ORIGENES DE LA PROGRAMACION ORIENTADA A OBJETOS.

1.a^ Etapa. Lenguajes Ensambladores. La unidad de programación es la instrucción, compuesta de un operador y los operandos. El nivel de abstracción que se aplica es muy bajo.

2.a^ Etapa. Lenguajes de Programación: Fortran, Algol, Cobol. Los objetos y operaciones del mundo real se podían modelar mediante datos y estructuras de control separadamente. En esta etapa el diseño del software se enfoca sobre la representación del detalle procedimental y en función del lenguaje elegido. Conceptos como: refinamiento progresivo, modularidad procedimientos y programación estructurada son conceptos básicos que se utilizan en esta etapa. Existe mayor abstracción de datos.

3.a^ Etapa. Se introducen en esta etapa los conceptos de abstracción y ocultación de la información.

4.a^ Etapa. A partir de los años setenta se trabaja sobre una nueva clase de lenguajes de simulación y sobre la construcción de prototipos tales como Simula-70 y basado en parte de éste, el Smalltalk. En estos lenguajes, la abstracción de datos tiene una gran importancia y los problemas del mundo real se representan mediante objetos de datos a los cuales se les añade el correspondiente conjunto de operaciones asociados a ellos. Términos como Abstracción de datos, objeto, encapsulación entre otros, son conceptos básicos sobre la que se fundamenta la POO.

1.2 CONCEPTOS DE LA PROGRAMACION ORIENTADA A OBJETOS.

La POO representa una metodología de programación que se basa en las siguientes características:

  1. Los diseñadores definen nuevas clases (o tipos) de objetos.
  2. Los objetos poseen una serie de operaciones asociadas a ellos.
  3. Las operaciones tienden a ser genéricas, es decir, operan sobre múltiples tipos de datos.
  4. Las clases o tipos de objetos comparten componentes comunes mediante mecanismos de herencia.

Objeto: Una estructura de datos y conjunto de procedimientos que operan sobre dicha estructura. Una definición más completa de objeto es: una entidad de programa que consiste en datos y todos aquellos procedimientos que pueden manipular aquellos datos; el acceso a los datos de un objeto es solamente a través de estos procedimientos, únicamente estos procedimientos pueden manipular, referenciar y/o modificar estos datos.

Para poder describir todos los objetos de un programa, conviene agrupar éstos en clases.

Clase: Podemos considerar una clase como una colección de objetos que poseen características y operaciones comunes. Una clase contiene toda la información necesaria para crear nuevos objetos.

Encapsulación: Es una técnica que permite localizar y ocultar los detalles de un objeto. La encapsulación previene que un objeto sea manipulado por operaciones distintas de las definidas. La encapsulación es como una caja negra que esconde los datos y solamente permite acceder a ellos de forma controlada.

Las principales razones técnicas para la utilización de la encapsulación son:

  1. Mantener a salvo los detalles de representación, si solamente nos interesa el comportamiento del objeto.
  2. Modificar y ajustar la representación a mejores soluciones algorítmicas o a nuevas tecnologías de software.

Para crear un objeto, es preciso definir primero su forma general utilizando la palabra reservada class. Una class es parecida a una estructura, es un tipo definido por el usuario que determina las estructuras de datos y las operaciones asociadas con este tipo. Las clases son como plantillas o modelos que describen como se construyen ciertos tipos de objetos, cada vez que se construye un objeto de una clase se crea una instancia de esa clase, por consiguiente; los objetos son instancias de clases.

Una clase es una colección de objetos similares y un objeto es una instancia de una definición de una clase; una clase puede tener muchas instancias y cada una es un objeto independiente. Una clase es simplemente un modelo que se utiliza para describir uno o mas objetos del mismo tipo.

Así, por ejemplo sea una clase ventana, un tipo de dato, que contenga los miembros dato:

posx, posy tipo_ventana tipo_borde color_ventana

y unas funciones miembro:

mover_horizontal mover_vertical

Un objeto de la clase ventana, es una ventana concreta (una instancia de la clase) cuyos datos tienen por valores:

posx x posy y tipo_ventana desplegable tipo_borde linea doble color_ventana amarillo

desplegable

x, y amarillo

Línea doble

1.3.1 DEFINICIÓN DE UNA CLASE.

Una clase es la evolución natural de una estructura, la existencia de clases es la característica más significativa que convierte a C++ en un lenguaje orientado a objetos. Las clases son estructuras que contienen no sólo declaraciones de datos, sino también declaraciones de funciones. Las funciones se conocen como funciones miembro, e indican qué tipos de cosas puede hacer una clase. La palabra reservada class introduce una declaración de clase.

1.3.2 IDENTIFICADORES DE CLASE.

La longitud máxima para un identificador de clase es 32 caracteres. Una convensión que se adopta en todas las clases de borland es utilizar nombres que comiencen con una letra mayúscula para denotar clases y estructuras globales.

1.3.2.1 CUERPO DE UNA CLASE.

La forma general de la declaración de una clase es:

class Nombre_de_la_clase{ datos y funciones privados . . . public: datos y funciones publicas . . . }lista de objetos;

Una clase puede contener tanto partes publicas como partes privadas, por defecto, todos los elementos que se definen en la clase son privados; esto significa que no pueden acceder a ellas ninguna función que no sea miembro de la clase.

Class Counter{

long count; // variable privada , variable miembro de la clase

Public:

void SetValue(long); // Funciones públicas, funciones miembro de la clase long GetValue(); };

Una instanciación es simplemente una instancia de una clase en la forma de una variable específica.

Las variables instanciadas a partir de clases son objetos.

El objeto Gente se podría usar así en un programa:

void main() { Counter Gente; // Declaración de un objeto Gente.SetValue(1000); // Invocación a función miembro de Counter long value = GetValue(); // Invocación a función miembro de Counter }

La iniciación se tiene que hacer a través de sus funciones miembro, por lo que hacer lo siguiente sería un error.

void main() {

Counter Gente; Gente = 1000; // error, la variable no esta disponible en la función main() long value = GetValue(); } El código anterior no hace mucho, pero ilustra 2 aspectos importantes: La declaración de un objeto dentro de una función y la invocación de funciones miembro de un objeto.

En otro ejemplo, ésta clase define un tipo llamado cola, que se utiliza para crear un objeto de tipo cola.

include

class cola{ int c[100]; int posfin, posprin;

public: void iniciar(void); void ponent(int i); int quitaent(void);

};

Cuando llega el momento de codificar realmente una función que es miembro de una clase, es preciso decir al compilador a que clase pertenece la función, calificando el nombre de la función con el nombre de la clase del cual es miembro. p.e.

void cola :: ponent(int i)

if(posfin>=100) { cout<<"la cola esta llena "; return; } posfin++; c[posfin] = i; }

El :: se llama operador de resolución de ámbito; indica al compilador que la función

ponent(int i) pertenece a la clase cola, o dicho de otra manera, ponent(int i) está dentro del ámbito de cola.

Para llamar a una función miembro desde una parte del programa que no sea parte de la clase, se debe utilizar el nombre del objeto y el operador punto. p.e.

Cola a, b; // se crean 2 objetos tipo cola.

a.iniciar(); // llama a la función iniciar para el objeto a. Consideremos el siguiente ejemplo, de un programa en C++, aunque en una aplicación real la declaración de las clases debe estar contenida en un archivo de cabecera.

include

class cola{ int c[100]; int posfin, posprin; public: void iniciar(void); void ponent(int i); int quitaent(void); };

main(void) { cola a, b; a.iniciar(); b.iniciar();

La tarea de una clase consiste en ocultar la mayor cantidad de información posible. Por lo tanto es necesario imponer ciertas restricciones a la forma en que se puede manipular una clase. Existen 3 tipos de usuario de una clase:

1.- La clase misma. 2.- Usuarios genéricos. 3.- Clases derivadas.

Cada tipo de usuarios tiene privilegios de acceso asociados a una palabra clave:

1.- Private. 2.- Public. 3.- Protected.

Ejemplo:

class controlAcceso{ int a; public: int b; int fi(int a); protected: int c; float C1(float t); };

Cualquier declaración que aparezca antes de cualquiera de las tres palabras clave, por default es private; así, int a; es private.

1.4.1 MIEMBROS DE LA CLASE PRIVATE.

Los miembros de la clase private tienen el mas estricto control de acceso. Solo la clase misma puede tener acceso a un miembro private. En este ejemplo nadie puede usar la clase ya que todo es private.

Class Privada{

long valor; void F1(); void F2();

};

void main() {

privada objeto1; // Se crea objeto1 de clase privada. long L = &objeto.valor; // acceso no valido por ser private. objeto1.F1(); // acceso no valido por ser private. objeto1.F2(); // acceso no valido por ser private.

}

Para poder tener acceso necesitaría que las funciones miembro fueran declaradas en la sección public.

1.4.2 MIEMBROS DE LA CLASE PUBLIC:

Para utilizar un objeto de una clase, usted debe tener acceso a datos miembro, a funciones miembro o a ambos. Para hacer que algunos datos o funciones sean accesibles, se declaran en la sección public.

class Ej_public{

public: int variable; void función1();

};

void Ej_public::función1(){} void main() {

Ej_public Objeto2; int i = Objeto2.variable; Objeto2.función1();

}

Cualquier cosa que se declara en la sección public, hace posible el acceso ilimitado a cualquier persona.

Considere una jerarquía de objetos como se ilustra a continuación:

Class A

Protected:

int valor_A;

Class B

Public:

void funB();

Class C

Public:

Void funcC();

La jerarquía de clase se puede expresar con código así:

class A{ Protected: int valor_A; };

class B{ public: void funB(); };

class C{ public: void funC(); };

La propiedad de ser protected se extiende indefinidamente hacia abajo en un árbol de herencia, en tanto que se declare que las clases derivadas tengan clases de base public. Por ejemplo el código siguiente es aceptable.

void funB() { valor_A = 0; }

void funC() { valor_A = 1000; }

1.5 APUNTADORES COMO MIEMBROS DE DATOS.

Los miembros de datos pueden ser también apuntadores. Los apuntadores no se pueden inicializar dentro de la declaración de una clase. Si un miembro de datos apunta a un tipo de clase, el apuntador no se iniciliza, ni las construcciones son llamadas de manera automática. Ejemplo.

class Segunda{

int id;

public:

Primera* Object; Segunda(); Int getnom() { return id; }

};

Aquí, el miembro se declara para apuntar a un elemento de otra clase llamada primera. En la construcción de la clase segunda, el espacio de almacenamiento se asigna al objeto apuntador, pero el apuntador se deja sin inicializar.

1.6 CONSTRUCTORES.

Un constructor es una función especial que es miembro de esa clase y que tiene el mismo nombre de la clase.

Es muy frecuente que una cierta parte de un objeto necesite una iniciación antes de que pueda ser utilizada; como el requisito de iniciación es tan frecuente C++ permite que los objetos se den a sí mismos valores iniciales cuando se crean. Esta iniciación automáticamente se lleva a cabo mediante el uso de una función de construcción o constructor. Por ejemplo este es el aspecto que tiene la clase cola cuando se modifica para utilizar las iniciaciones:

include

class cola{ int c[100]; int posfin, posprin;

public: cola(void); // este es el constructor de la clase cola void ponent(int i); int quitaent(void);

}; Obsérvese que no se especifica un tipo de dato proporcionado para el constructor cola(). En C++, los constructores pueden proporcionar valores. La función cola() se codifica de la siguiente manera:

cola::cola(void) { posfin=posprin=0; cout<<"la cola ya tiene valores iniciales \n"; }

La función de construcción de un objeto se invoca cuando se crea el objeto. Esto significa que se invoca cuando se ejecuta la declaración del objeto. Además, para los objetos locales, el constructor se invoca cada vez que se llega a la declaración del objeto. Como lo dice el nombre, un constructor es una función que se utiliza para construir un objeto de una clase dada; esto puede implicar la presencia de diferentes escenarios.

1.- Creación de objetos con iniciación definida. 2.- Creación de objetos con iniciación especifica. 3.- Creación de objetos copiando otro objeto.

Cada uno de estos procesos implica un tipo diferente de constructor. Un constructor tiene el nombre de la clase a la que pertenece.

Un sub objeto es un objeto de clase que se declara dentro de otra clase. Cuando se tiene una instancia en una clase, su constructor debe crear un objeto de esa clase. Si la clase tiene sub objetos declarados en ella, el constructor tiene que invocar los constructores de estos objetos. Considere el ejemplo siguiente.

class counter{ int value; public: Counter() { value = 0; } };

class Example{ int value; public: Counter cars; Example() { value = 0; } };

void main() { Example e; }

Cuando se crea el objeto e en main(), se llama al constructor de la clase Example; en este caso, la función Example::Example() antes de ejecutar su cuerpo, invoca al constructor Counter::Counter() del sub objeto cars. Cuando se completa este constructor, se ejecuta el cuerpo de Example::Example().

1.6.1 CONSTRUCTORES PRIVATE.

Obsérvese que el constructor anterior aparece en la sección public de la clase; este no es un requisito, pero normalmente es el caso.

Un constructor private, impediría que los usuarios genéricos crearan objetos a partir de esa clase y forzarán el cumplimiento de una de las condiciones siguientes antes de que se pueda crear un objeto.

1.- Un miembro estático de la clase invoca al constructor. 2.- Una clase friend de esa clase invoca al constructor. 3.- Un objeto existente de la clase tiene una función miembro que crea nuevos objetos invocando al constructor.

// uso de los constructores.

void main() {

Counter Object(“5”); // Utilizando constructor char* Counter Object1(5); // Utilizando constructor int Counter Object2(5L); // Utilizando constructor long Counter Object3(5.0); // Utilizando constructor double Counter Object4(); // Utilizando constructor por omisión

}

El compilador puede determinar automáticamente a que constructor llamar en cada caso examinando los argumentos.

1.6.3 CONSTRUCTORES PARA COPIAR OBJETOS.

Cuando se crea un objeto, a menudo no se desea inicializar ningún valor de manera específica; simplemente se desea que un objeto “sea como otro”. Esto implica hacer una copia de un objeto preexistente, lo cual requiere un tipo especial de construcción, llamada en general: constructor de copia. Ejemplo.

class Counter{ . . . public:

Counter(Counter&); . . . };

Counter::Counter(Counter &referencia) {

count = referencia.count;

}

void main() {

Counter Object(5); // Constructor entero Counter Object1 = Object; // Constructor de copia

}

1.7 DESTRUCTORES.

Los destructores entran en la misma categoría que los constructores. Se utilizan para realizar ciertas operaciones que son necesarias cuando ya no se utiliza un objeto como es la liberación de memoria.

Existen algunas diferencias importantes entre los constructores y los destructores:

1.- Los destructores pueden ser virtuales, los constructores NO. 2.- A los destructores no se les puede mandar argumentos. 3.- Sólo se puede declarar un destructor para una clase dada.

El destructor se nombra como la clase pero este va precedido de un tilde (~).

Se podría escribir una clase que se encargue de manejar todas las gráficas generadas por un programa de la siguiente manera:

class Graphics{

public: Graphics(); ~Graphics(); void DrawCircle(int x, int y, int radio); void DrawDot(int x, int y); . . };

El destructor se utiliza para cerrar el dispositivo gráfico y rechazar cualquier espacio de memoria asignado al objeto.

Por ejemplo vea la clase cola con su constructor y destructor (en el ejemplo de la clase cola no es necesario un destructor, pero en este caso se pone para ejemplificar su uso).