Presentación de PowerPointhilario_sm/slide/Programacion_2... · 2018-10-17 · Al igual que con el...
Transcript of Presentación de PowerPointhilario_sm/slide/Programacion_2... · 2018-10-17 · Al igual que con el...
Lenguaje de Programación Orientado a Objetos Elementos avanzados.
4.1 Tratamiento de excepciones4.2 Desarrollo de ejercicios con tipos de datos
primitivos y abstractos(Pila, Cola y Lista ligada)4.3. Interfaces Gráficas de Usuario4.4 Flujos de Entrada/Salida.4.5 Recursividad
Las excepciones son en realidad errores durante la ejecución. Si uno de esos erroresse produce y no implementamos el manejo de excepciones, el programasencillamente terminará abruptamente. Es muy probable que si hay ficherosabiertos no se guarde el contenido de los buffers, ni se cierren, además ciertosobjetos no serán destruidos, y se producirán fugas de memoria.
4.1 Manejo de excepciones
Manejo de excepciones
El sistema operativo se quejará, y el programa terminará en el momento queintentamos asignar un valor a un elemento del array.Podemos intentar evitar este error, comprobando el valor del puntero después delnew:
El throw se comporta como un return. Lo que sucede es lo siguiente: el valor devuelto por el throw se asigna al objeto del catch adecuado. En este ejemplo, al tratarse de un carácter, se asigna a la variable 'c', en el catch que contiene un parámetro de tipo char
4.2 Desarrollo de ejercicios con tipos de datos primitivos
•Tipos de datos primitivos abstractos•Pila(class, plantilla) •Cola •Lista ligada
Stack
-Tamano_stack:int;
-Arreglo[Tamano_stack];
-top:int;
+Stack( );
+Pop( ):object;
+Push(Object a):void;
+size( ):int;
+isEmpty( ):boolean;
+tope( ) :Object;
3
7
2
5 TOP
STACK
Concepto de Stack
Visto unidad III
Ejemplo 1Suma (interfija, posfija y prefija)
Considere la suma A y B. Pensamos aplicar el operador “+” a los operadores A y B y escribir la suma como A+B. Esta representación particular se denomina interfija. Hay otras dos notaciones para expresar la suma de A y B usando los símbolos A, B y +. Estas son:
posfijaAB+
prefija+AB
Posición del operador
Si tenemos A+(B*C)
A+(BC*)
A(BC*)+
ABC*+
forma posfija
Si tenemos A+(B*C)
A+(*BC)
+A(*BC)
+*ABC
forma prefija
Si tenemos (A+B)*C)
(AB+)*C
(AB+)C*
AB+C*
forma posfija
Prioridad operador
1 $ (exponencial)
2 * y /
3 + y -
Interfija Posfija
A+B AB+
A+B-C AB+C-
(A+B)*(C-D) AB+CD-*
A$B*C-D+E/F/(G+H) AB$C*D-EF/GH+/+
((A+B)*C-(D-E))$(F+G) AB+C*DE- -FG+$
A-B/(C*D$E) ABCDE$*/-
Las operaciones se evalúan Izq der.
Interfija Prefija
A+B +AB
A+B-C -+AB
(A+B)*(C-D) *+AB-CD
A$B*C-D+E/F/(G+H) +-*$ABCD//EF+GH
((A+B)*C-(D-E))$(F+G) $ -*+ABC-DE+FG
A-B/(C*D$E) -A/B*C$DE
Evaluar 6 2 3+-3 8 2 /+* 2 $ 3 +
Estado de la pila
Ejemplo 2suma de los número 592 y 3784 utilizando pilas
295
Oper1- stack1
4873
Oper2- stack2
result- stack3
95 5
873 3
73
6
376
76
4376
592+3784
4376
15
+713
9+8
17
2+4
6
1+3
4
+ 6 + 1 7 + 1 3 + 4
Ejemplos aplicaciones que utilizan pilas
• Recursividad
• Recorrido de árboles
• Conversión de base de un numero
( )a ( )b
• Un ejemplo de pila lo constituye el mecanismo que establecen los lenguajes de programación paragarantizar las llamadas anidadas a subprogramas dentro de una aplicación.
Concepto Cola (fifo)
Al igual que con el TDA pila, una cola se puede implementar tanto con arreglos como con listas enlazadas. A continuación se verá la implementación usando un arreglo
Las variables de instancia necesarias en la implementación son:
•primero: indica el índice de la posición del primer elemento de la cola, es decir,
la posición el elemento a retornar cuando se invoque sacar.
•ultimo: indica el índice de la posición de último elemento de la cola. Si se
invoca encolar, el elemento debe ser insertado en el casillero siguiente al que
indica la variable.
•numElem: indica cuántos elementos posee la cola. Definiendo MAX_ELEM
como el tamaño máximo del arreglo, y por lo tanto de la cola, entonces la cola
esta vacía si numElem==0 y está llena si numElem==MAX_ELEM.
Concepto de FIFO(firstin, firstout) Colas
3
7
2
5 TAILQUEUE
HEADD
equ
eue
queue
-Tamano:int;
-Arreglo[Tamano ]:Object;
-Tail:int;
-Head:int;
+queue( );
+enqueue(Object b):void;
+dequeue( ):Object;
+Size( ):int;
+isEmpty( ):boolean;
DESENCOLANDO (Dequeue)
372 TAIL
Encolando (Enqueue)
ANTES
ENQUEUE(10)372
10
DESPUÉS
10TAIL
3725
TAIL
ANTES
Dequeue( )
3
DESPUÉS
HEAD 725
TAIL
HEAD
Dequeue(2 )
HEAD HEAD
Operaciones Básicas de la Cola
•Inicializar la cola.
•Añadir un elemento al final de la cola.
•Eliminar el primer elemento de la cola.
•Vaciar la cola.
•Verificar el estado de la cola: Vacía / Llena.
Colas usando el concepto de listas ligadas
Ejemplo 1Serie
n
jj
j
j1
1
2
1)1(
4321
4
1
1
24
1
23
1
22
1
21
1
2
1)1(
jj
j
j
4231 24
1
22
1
23
1
21
1
cola1cola2
Ejemplo 2: Checar si una palabra es palíndromo
Palabra
Ejem: ama=ama maria≠airam
a
i
r
a
m
a
i
r
a
m
QueueStack
Ejemplo aplicaciones utilizan colas
• Turno en banco
• Un ejemplo de cola es la cola de impresión en el sistema operativo Windows. Cada usuario de una red deWindows coloca sus trabajos de impresión y el sistema lo imprime en el mismo orden en que fueroninsertados en la cola de impresión.
• Cola de procesos S.O
• Cola de mensajes programación sistemas
• Clientes en una caja de supermercado
• Cola peticiones en un servidor de correo
Si un nodo contiene un campo que hace referencia a otro nodo,entonces se puede hilar varios nodos utilizando sólo una variable (p)para acceder a la secuencia de nodos completa (lista ligada)
Concepto Lista ligadas
fig. 13
Creación de un nodo
Creación de la lista
IntSLLNode p=new IntSLLNode(10);
Esto crea el primer nodo de la lista y hace de la variable p una referencia a este nodo. Esto se hace en cuatro pasos.
1. Se crea un IntSLLNode nuevo (fig 13 a)2. El campo info de este nodo se establece en 10 (fig 13 b)3. El campo next del nodo se establece en null (\) (fig 13 c)4. Convierte p en una referencia al nodo recién creado (fig 13 d)
El segundo nodo se crea con la asignación
p.next=new IntSLLNode(8);
donde p.next es el campo next del nodo señalado por p (fig 13 d) como antes se ejecutan cuatro pasos
1. Se crea un nuevo nodo (fig 13 e)2. El campo info de este nodo se establece en 8 (fig 13 f)3. El campo next del nodo se establece en null (\) (fig 13 g)4. El nodo nuevo se incluye en la lista al convertir el campo next del
primer nodo una referencia al nodo nuevo (fig 13 h)
La lista ligada se amplia al añadir un tercer elemento con la asignación
p.next.next=new IntSLLNode(50);
Sol. mantener dos referencias a la lista ligada: una al primer nodo y una al último.
Listas ligadas simples
Nodo
-Info:Object-next :Nodo
+Nodo(Object a)
Lista
-head:Nodo -tail:Nodo
+Lista( )+estaVacia(): boolean +Insertartail(Object a):void +recorrerlista(): Void
Lista2
+main();
*
1
* 1
Relacion?
figura 3.4
figura 3.5
Eliminación
Arreglo nodos conteniendo 4 listas
ListaMio
+main( );
NodoLista
-Elemento:Object
-Siguiente:NodoLista
+NodoLista(Object h);
+NodoLista(Object h,NodoLista final);
*
1
* 1
Relación?
Lista
-head:NodoLista -tail:NodoLista
+Lista( )+estaVacia( ): boolean +Insertarhead(Object a):void+Insertartail(Object
4.3. Interfaces Gráficas de Usuario
4.4 Flujos de Entrada/Salida.
Concepto de Recursividad
Una función que se llama a sí misma sedenomina recursiva
Diseño de algoritmos recursivos
Siempre debe existir al menos un caso base
Los casos generales siempre deben avanzar hacia un caso base. Esdecir, la llamada recursiva se hace a un subproblema mas pequeñoy, en última instancia, los casos generales alcanzarán un caso base.
Iterativo vs. recursivo
Definición iterativa
0!=1
n!=n*(n-1)*(n-2)*…*(1)*0!
Trabajando con métodos recursivos en C++
Ejecución de un modulo recursivo
2
1
0
1
1*1=1
1*2=2
2*3=6
6
STACK
Traza de algoritmos recursivosSe representan en cascada cada una de las llamadas al módulo recursivo, así como sus respectivas zonas de memoria y los valores que devuelven.
Ejemplo 1
Calcular la raíz cuadrada de un número usando un método iterativo, la función es la siguiente
xx
x n
n
n
n1
12
1
Donde:n es el número a encontrar su raíz cuadrada y n>1
es el valor inicial y esta dado por
es el valor calculado anteriormentexn 1
20
nx x0
Calculo de forma iterativa
Calculo de forma recursiva
Ejemplo 2
Calculo de la potencia
nx1 Si n=0
1 nxx Si n>0
Ejemplo 3
Calcular la siguiente sumatoria
n
n
ii xxxxx
suma1
...1111
2100
Donde:n es el de términos de la sucesión a sumarsuma suma total de los n-esimos términos
Por ejemplo: Si x=2 y n=3
875.12
1
2
1
2
1
2
1
2
13210
3
0
i
isuma
Bibliografía
• http://www.grch.com.ar/docs/unlu.poo/Clases-objetos%20C++.pdf• http://www.udb.edu.sv/udb/archivo/guia/informatica-ingenieria/programacion-
ii/2013/i/guia-9.pdf