48
Introducción a la POO JUAN CARLOS CONDE RAMÍREZ INTRODUCTION TO PROGRAMMING

Introducción a la POO - climate.cs.buap.mxclimate.cs.buap.mx/CondeJC/cursos/Material/Introduction2Prog_/Notas... · •Se ha dicho que la Tecnología Orientada a Objetos es una metodología,

  • Upload
    ngodien

  • View
    223

  • Download
    0

Embed Size (px)

Citation preview

Introducción a la POOJUAN CARLOS CONDE RAMÍREZ

INTRODUCTION TO PROGRAMMING

La Tecnología Orientada a Objetos

•Se ha dicho que la Tecnología Orientada a Objetos es una metodología, un paradigma, unatecnología de empaquetamiento, un método de análisis y diseño, y hasta un nuevo lenguajepara datos abstractos.

•Planteada como una herramienta para construir modelos funcionales de Sistemas Físicos complejos que pudieran contener varios miles de componentes.

FCC-BUAP 2

Objetivo del curso

•Conocer el ambiente de trabajo utilizando los conceptos de la Programación Orientada aObjetos

•Familiarizarse con los conceptos de Clase y Objetos.

•Aplicar la POO en el desarrollo de aplicaciones.

FCC-BUAP 3

Situación actual•La tecnología orientada a objetos es ya una realidad, sinónimo de calidad y robustez.

•Su impacto aparece en todos los ámbitos del quehacer informático.

•Las empresas desarrolladoras de software no solo están creando nuevos productos Orientados aObjetos, están reestructurando sus productos ya existentes, usando Lenguajes Orientados aObjetos.

•Obteniendo como resultado flexibilidad, modularidad y reusabilidad, en un esfuerzo porenfrentar la dinámica de cambio y la competencia comercial en tiempos de mercadosglobalizados.

FCC-BUAP 4

¿Cómo hemos llegado hasta aquí?•Programación modular: invención de la subrutina a principios de los años 50’s

•Programación Estructurada: (60’s) descomposición funcional, un programa se descompone enpartes componentes, en sub-partes componentes y así sucesivamente.

•Ingeniería de Software Asistida por Computadora (CASE): Automatización de la programación apartir de diagramas.

•Lenguajes de Cuarta Generación (4GL’s): conjunto de herramientas para la creación deaplicaciones, incluyendo formas, reportes, etc.

FCC-BUAP 5

Opciones disponibles

•Los esfuerzos para mejorar el desarrollo del software, se han enfocado hasta ahora en lamodularización de los procedimientos, separando el otro ingrediente de la ecuación de NiklausWirth

Algoritmos + Estructuras de Datos = Programas

es decir, la colección de información sobre la que operan los procedimientos.

FCC-BUAP 6

Los Objetos

•El concepto de Objetos surgió de la necesidad de modelar los objetos del mundo real ensimulaciones por computadora.

•Un objeto se define, entonces, como una unidad de software que contiene una colección dedatos y procedimientos interrelacionados y que es capaz de recibir mensajes del exterior.

•Los datos definen el estado del Objeto en cualquier momento y los procedimientos que definenel comportamiento de un Objeto.

FCC-BUAP 7

Clases

•Una Clase es un tipo definido por el usuario, ya que generaliza el concepto de Estructura y loreemplaza con ventaja.

•Una Clase es un prototipo que define los métodos y datos que serán incluidos en un tipo deobjeto particular, así que los objetos son instancias de las clases.

FCC-BUAP 8

Los lenguajes POO•Simula-67 (intento académico prehistórico).

•Los lenguajes Orientados a Objetos más conocidos comercialmente:

◦ Java

◦ C++

◦ C#

◦ Objective-C

◦ Phyton

◦ Perl

◦ PHP

◦ JavaScript

FCC-BUAP 9

◦ Visual Basic

◦ Visual Fox Pro

◦ Object Pascal

◦ Ada

◦ Lisp

◦ Etc.

Objeto Computacional

Def. Representación en memoria de una abstracción del mundo real, un enteencapsulado que contiene Datos y Métodos, y que es capaz de recibir mensajesdel exterior.

FCC-BUAP 10

Mensajes

•La forma en que los Objetos interactúan entre si, es enviando mensajes pidiendo que se active(ejecute) un método específico.

•Un mensaje consiste simplemente del nombre del Objeto a quien va dirigido, seguido delnombre del Método que el receptor sabe como ejecutar (usar parámetros en caso de sernecesario).

FCC-BUAP 11

Conceptos Relacionados•El ESTADO de un objeto acompaña todas las propiedades (generalmente estáticas) además desus valores actuales (generalmente dinámicos) de cada una de esas propiedades.

•La CONDUCTA es como un objeto actúa y reacciona, en términos de sus cambios de estado ypaso de mensajes.

•La IDENTIDAD es la propiedad de un objeto

que lo distingue de los otros objetos

FCC-BUAP 12

Abstracción

•Una abstracción denota las características esenciales de un objeto para distinguirlo de otro tipode objetos y así proveer límites conceptuales bien definidos, relativos a la perspectiva delobservador.

FCC-BUAP 13

Tipo

•El tipo es el reforzamiento de la clase de un objeto, semejante a los objetos de diferentes tiposque no deberían ser intercambiados, o a lo más, deberían ser intercambiados de modo muyrestringido.

FCC-BUAP 14

Encapsulamiento•Mecanismo por medio del cual, un objeto esconde sus datos y métodos al mundo exterior. Elencapsulamiento permite proteger los datos de transformaciones no deseadas, y sólo bajoautorización del propio objeto.

•Encapsulación es el proceso de departamentalizar los elementos de una abstracción queconstituye su estructura y conducta; sirve para separar la interfaz de una abstracción de suimplementación.

FCC-BUAP 15

Modularidad•Es la propiedad de un sistema que ha sido descompuesto en un conjunto de módulos altamentecohesivos y mínimamente acoplados

FCC-BUAP 16

Jerarquía

•La jerarquía es una clasificación u ordenamiento de abstracciones

a) Herencia Simple y Múltiple (“es un”)

b) Agregación (“parte de”)

FCC-BUAP 17

Herencia

•Es un mecanismo por el cual, una clase de objetos puede expresarse como un caso especial deun clase más general, es decir, incluye automáticamente toda la definición de datos y métodosde la clase general.

“Subclases” y “Superclases”

FCC-BUAP 18

Herencia

• Es el proceso por medio del cual, un objeto puede adquirir las propiedades de otro objeto.

• La importancia de la herencia se basa en que constituye un mecanismo que soporta laclasificación.

• La herencia puede ser simple o múltiple

FCC-BUAP 19

Polimorfismo•Es la posibilidad de que un nombre (identificador), pueda ser usado con diferentes propósitos,aunque relacionados semánticamente (interface y múltiples métodos).

◦ Sobrecarga de Operadores

◦ Sobrecarga de Funciones

◦ Sobrecarga de Constructores

◦ Polimorfismo de Herencia

◦ Funciones Virtuales

FCC-BUAP 20

Concurrencia

•La Concurrencia permite a distintos objetos actuar al mismo tiempo.

FCC-BUAP 21

Persistencia•La persistencia es una propiedad de un objeto a través de la cual, su existencia trasciende altiempo y/o espacio.

•Por ejemplo:◦ El objeto continua existiendo después de que su creador deja de existir y/o espacio

◦ La locación de un objeto se mueve de un espacio de ubicación del que fue creado.

FCC-BUAP 22

Preliminares•Todo programa en lenguaje C++ debe tener la siguiente extensión:

file.c, file.cc // en UNIX

file.cpp // en Windows/ MS-DOS

•Comentarios en C++

/* Este es un comentario */

/* Es también es un

comentario

multilíneas */

// comentario unilineal

FCC-BUAP 23

Programa principal

•Todos los programas deben tener un main():

◦ main() es la función llamada por el Sistema Operativo.

◦ main() regresa 0 y significa que termino con éxito.

◦ Las llaves { } denotan el cuerpo del programa.

◦ Toda declaración termina con un punto y coma (“;”)

FCC-BUAP 24

Un primer programa#include <iostream.h> // librería de encabezado

int main() // función principal

{ // inicio del cuerpo del programa

float a, b, c; // declaración de variables reales

cin >> a >> b; // entrada de datos

c = a + b; // suma

cout << “ La suma es : “ << c << endl; // salida de datos

return 0; // termino del programa

} // fin del cuerpo de la función main

FCC-BUAP 25

Tipos de datos en C++

int x,y; // variables enteras

float s; // variable real

char a[10]; // a = arreglo de 10 caracteres

bool Lógicos

char Caracter*1

short Entero*2

int , int long Entero*4

float Real*4

double Real*8

FCC-BUAP 26

Operadores#include <iostream.h>

int main()

{

int i = 1;

cout << i << “, “ ;

cout << (++i ) << “, “ ;

cout << i << “, “ ;

cout << (i++) << “, “ ;

cout << i << endl;

return 0;

}

Salida : 1, 2, 2, 2, 3

Operación Descripción

x + y suma

x – y resta

x* y multiplicación

x/y división

x % y modulo

+x positivo

-y negativo

x++ Pos incremento

++x Pre incremento

x-- Pos decremento

--x Pre decremento

FCC-BUAP 27

....más operadores

Donde && y || se evalúan de izquierda a derecha

Operación Op. De Relación

x < y Menor que

x <= y Menor o igual que

x > y Mayor que

x >= y Mayor o igual que

x == y Igual

x != y Diferente

Operación Op. Lógicos

0 Valor falso

No-cero Valor verdadero

!x Negación

x && y and

x ¦¦ y or

FCC-BUAP 28

Operadores para manejo de bits

char x; // Binario

// Operación

x=7; 0 0 0 0 0 1 1 1 //(Asignación)

x << 1; 0 0 0 0 1 1 1 0 //14(x*2)

x << 3; 0 1 1 1 0 0 0 0 //112(x*8)

x << 2; 1 1 0 0 0 0 0 0 //192(x*4-2^8)

x >> 1; 0 1 1 0 0 0 0 0 //96(x/2)

x >> 2; 0 0 0 1 1 0 0 0 //24(x/4)

Operación Descripción

-i Complemento

i & j And

i ˆ j Or exclusivo

i ¦ j Or inclusivo

i << j Corrimiento a la izquierda

i >> j Corrimiento a la derecha

FCC-BUAP 29

Estructura de un Lenguaje de Programación

•Un programa en Lenguaje C/C++ está formado por las siguientes estructuras:

◦ Entrada y Salida: cin y cout

◦ Decisión: if-else y switch

◦ Repetición: for, while, do-while

• Importante dentro del lenguaje:

◦ Funciones: por valor y por referencia

◦ Arreglos : unidimensionales y mutidimensionales

◦ Estructuras: struct

FCC-BUAP 30

Estructuras de Decisiónif [else]:

El if se utiliza para verificar si unaexpresión es verdadera (se ejecuta lassentencias1) o si la expresión es falsa (seejecutan las sentencias2).

if (expresión)

{

sentencias1;

}

else

{

sentencia2;

}

#include <iostream.h>

int main()

{

int a;

cout << “Da un numero: “ ;

cin >>a ;

if (a>=0 && (a%2==0))

cout << a <<“ Es par positivo \n”;

else if (a>=0 && (a%2==1))

cout << a <<“ Es impar positivo \n”;

else if (a<0 && (a%2==0))

cout <<a<<“ Es Negativo Par \n”;

else

cout <<a<<“ Es Negativo impar \n”;

return 0;

}

FCC-BUAP 31

Estructuras de Decisiónswitch:

Se utiliza para verificar una de variasopciones.

switch (expression)

{

case constante1: sentencia;

case constante2: sentencia;

case constante3: sentencia;

...

default : sentencia

}

Para terminar un case se utiliza break;

char ch;

cin >> ch;

switch (ch)

{

case ‘0’: case ‘1’: case ‘2’: case ‘3’:

case ‘4’: case ‘5’: case ‘6’: case ‘7’:

case ‘8’:

case ‘9’: cout << “\n Es un digito \n“;

break;

case ‘ ‘:

case ’\n’:

case ’\t’: cout << “\n Es un separador \n”);

break;

default: cout << “\n Otro \n”;

break;

}

FCC-BUAP 32

Estructuras de Repeticiónfor:

Repite un conjunto de sentencias unnúmero de veces determinado.

for(inicio; fin; incremento)

{

sentencia1;

sentencia2;

...

sentencian;

}

#include <iostream.h>

int main()

{

int n;

cout << “Da el limite de la sumatoria: ” ;

cin >> n ;

suma = 0;

for(i=1 ; i<= n ; i++)

{

suma=suma+i;

}

cout << “ La sumatoria es : “ << suma << endl;

return 0;

}

FCC-BUAP 33

Estructuras de Repeticiónwhile:

Repite un conjunto de sentencias 0 omás veces. Si la condición se cumple.

while (condición)

{

sentencia1;

sentencia2;

...

sentencian;

}

#include <iostream.h>

int main()

{

short x=1;

while (x <= 50)

{

if (x &2==1) cout << “ “<< x;

x++;

}

return 0;

}

FCC-BUAP 34

Estructuras de Repeticióndo - while:

Repite un conjunto de sentencias 1 omás veces. Mientras la condición esverdadera.

do {

sentencia1;

sentencia2;

...

sentencian;

}while (condición);

#include <iostream.h>

#include <math.h>

int main()

{

double n,aprox,antaprox, epsilon;

cout << “ Da n, aproximacion, error \n”;

cin >> n >> aprox >>epsilon);

do{

antaprox = aprox;

aprox = (n / antaprox + antaprox) / 2;

}while( fabs (aprox – antaprox)>=epsilon);

cout << “ La raiz cuadrada es : << aprox ;

return 0;

}

FCC-BUAP 35

Arreglos UnidimensionalesUn arreglo es una estructurahomogénea, compuesta por variascomponentes, todas del mismo tipo yalmacenadas consecutivamente enmemoria. Cada componente puede seraccedido directamente por el nombrede la variable del arreglo seguido de unsubíndice encerrado entre corchetes [ ].

#include <iostream.h>

int main()

{

int n, a[100], b[100], c[100], i;

cout << “Numero de elementos a sumar: “;

cin >> n;

for (i=0; i<n; i++) cin >> a[i];

for (i=0; i<n; i++) cin >> b[i];

for (i=0; i<n; i++) c[i] = a[i] + b[i];

cout << “ La suma de los vectores es \n”

for (i=0; i<n; i++)

cout << c[i]<< “ “;

return 0;

}

78 12 8 -20 14 100

0 1 2 3 4 5

X

Posición

Contenido del arreglo X en la posición 3

FCC-BUAP 36

Arreglos BidimensionalesA los arreglos bidimensionalesgeneralmente se les llaman tablas omatrices. Para acceder a los elementosde una matriz se utilizan dos índices,uno para indicar el renglón y el segundopara indicar la columna.

int n,m,r,c, ma[10][10];

cout << “Da # renglones y columnas: ”;

cin >> n >> m;

cout << “Lectura de la matriz \n”;

for (r=0 ; r<n;r++)

for(c=0; c<m;c++)

cin >> ma[r][c];

cout << “ Escritura de la Matriz \n”;

for (r=0 ; r<n;r++)

{

for(c=0; c<m;c++)

cout <<mc[r][c] << “ “;

cout << endl;

}

int m[3][4];

3 45 -1 -1

5 45 -8 4

-4 0 4 -7

1 2 3 0

0

1

2

Es el elemento m[1][2]=-8

FCC-BUAP 37

FuncionesLas funciones son bloques con losque se construyen programas C, y enellos se lleva a cabo toda actividaddel programa. Una vez que unafunción ha sido escrita y depurada,puede utilizarse una y otra vez.

La definición de una función consiste en un encabezado yun cuerpo. De manera explicita, se puede decir que es unbloque o una proposición compuesta. La estructura básicade la definición de una función es:

tipo nombre([,argumentos])

{

[declaraciones]

proposiciones

[return(expresión);]

}

main(){

func1();.....

func1()}

func1(){

func2();.....

return;}

func2(){

.....return;

}

FCC-BUAP 38

FuncionesEjemplo:

Definición de una función

int suma(int a, int b)

{

int valor;

valor = a+b;

return valor;

}

Llamado de la función:

#include <iostream.h>

int main(void)

{

int res, n1=23, n2=55;

res = suma (5,10);

cout <<“La suma es : ”<< res;

res = suma(n1,n2);

cout <<“La suma es: ” << res <<“\n”;

}

FCC-BUAP 39

Definición de una Claseclass nombre_de_la_Clase

{

datos privados

funciones privados

public:

datos públicos

métodos (funciones miembro) públicos

} lista_de_objetos;

lista_de_objetos puede no aparecer si lo único que se desea es declarar unadeterminada Clase.

FCC-BUAP 40

Funciones MIEMBRO• Los métodos de la clase también se denominan funciones miembro si son la única forma

de acceder los datos privados de la clase.

• (::) Operador de resolución de alcance quien le indica al compilador que la versión de lafunción cuyo identificador precede al mencionado operador, es la de la Clase en sí:

tipo nombre_de_la_clase::nomb_funcion( [lista de parámetros] )

{

cuerpo del método

}

IMPORTANTE: El hecho de que el método o función sea miembro de la clase implica que puede accederde forma DIRECTA a los atributos de la clase.

FCC-BUAP 41

Constructores

• C++ permite a los Objetos inicializarse por sí mismos en el momento de su creación. Estainicialización automática se lleva a cabo a través del uso de las funciones Constructores.

• Un Constructor, es una función especial que es miembro de la clase y que lleva el mismonombre que ella.

• Un Constructor no debe regresar ningún tipo.

FCC-BUAP 42

Destructores

•La función que completa al Constructor de un objeto, es un Destructor.

•El Destructor es una función miembro de una Clase que se llama implícitamente al momentode hacer desaparecer un objeto.

•El Destructor se denomina igual que la clase, solo que su nombre va precedido del signo denegación lógica (~).

FCC-BUAP 43

Ejemplo: Constructor y Destructor#include <iostream.h>

// Clase pila_car para modelar una Pila de caracteres

class pila_car

{

int size;

char *tope, *s;

public:

pila_car(int sz) {tope = s = new char[size = sz];}

~pila_car() {delete s;}

void push(char c) { *tope++ = c;}

char pop() { return *--tope;}

};

FCC-BUAP 44

Funciones en LINEA

• Una función en línea (inline), es una función que es expandida en línea cuando es llamada,en lugar de realizar el proceso de construir un llamado a función.

• La razón para usar funciones en línea es la eficiencia.

• Existen dos formas de declarar una función en línea:

1. De forma explicita

2. De forma implícita

FCC-BUAP 45

Ejemplo: funciones inline

/* Código en línea para la función inicia de la clase vector, forma EXPLICITA*/

inline void Vector::inicia (void)

{

e=0;

}

#include <iostream.h>

class Vector

{

int c[10];

int e;

public:

// De forma IMPLICITA

void inicia(void) {e=0;}

void pon_dato(int i);

void suma(Vector x, Vector y );

void Visualizar(void);

};

FCC-BUAP 46

Funciones AMIGAS

• Una clase puede ofrecer su amistad a una función externa, y con ello permitirle el acceso asu parte privada.

• Entonces una clase puede declarar a una función como su amiga, haciendo uso de lapalabra clave friend, y anexando su prototipo.

• Es importante notar que una función externa, no puede declararse a si misma, amiga deuna clase; debe por lo tanto, esperar a que alguna o algunas clases lo hagan su amiga.

FCC-BUAP 47

POLIMORFISMO (Sobrecarga de Constructores)

• En C++, dos o más funciones pueden tener el mismo nombre, variando solamente en losparámetros de su declaración.

• También los constructores pueden ser sobrecargados, simplemente debemos declarar lasdiferentes formas que deberá tomar, y definir su acción relativa a cada una de ellas.

FCC-BUAP 48