Publicado el 5 de Septiembre del 2019
930 visualizaciones desde el 5 de Septiembre del 2019
445,2 KB
22 paginas
Creado hace 15a (02/06/2009)
Facultad de Ingeniería
Universidad de Buenos
Aires
75-08 Sistemas Operativos
Lic. Ing. Osvaldo Clúa
2007
Aspectos Internos de la Programación
Aspectos Internos de la Programación
Orientada a Objetos
Orientada a Objetos
Modelo Procedural
tyepdef struct fraccion{
int num;
int den;}
void setFraccion (int n, int
d,fraccion &f){
f.num=n;f.den=d;}
int getNum(fraccion f){return
f.num;}
int main(){
fraccion f1;
setFraccion(3,4,f1);
}
Archivo de Código ejecutable
COFF – ELF - PE. . .
setFraccion(int n . . .)
getNum()
main(. . .)
Global data area
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
2
De Objetos A Procedural
Cabecera de la clase
// vector_plano.h
using namespace std;
class vector_plano{
private:
float ii; float jj;
.. .
public:
vector_plano(float x, float
y, bool cart=true);
float i();
float j();
};
Métodos
// vector_plano.cpp
float vector_plano::i(){
return ii;}
// vector_plano.cpp
float
vector_plano::vector_plano
(float x, float y) {. . .}
Exports
Constructores
i()
j()
Global Data Area
y.. las variables de instancia?
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
3
Clases y Objetos en Procedural
int i;
vector_plano uno (4.2,5.8);
vector_plano dos (3.7,9.1);
Run-time area del programa
i
uno
dos
ii
jj
ii
jj
Biblioteca de la clase
Vector_plano
Exports
Constructores
i( )
j( )
Global Data Area
Referencia:
Especificación del PE de Microsoft
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
4
Clases y SuperClases en
Procedural
Bibliotecas
Fr acci ón
get Num( )
Sub
Super
Fr acci ónOr den
esMayor ( )
Los métodos se buscan:
• En las subclases (si es polimórfico)
• En las SuperClases (por herencia)
Código del
programa
Obj et o 1
Obj et o 2
Referencia:
Thinking in C++ Capítulo
dedicado a funciones
virtuales. (de Bruce Eckel)
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
5
Clases y Objetos en O.O.
Var i abl es de cl ase
Di cci onar i o de
Mét odos
Super
Sub
Var i abl es de cl ase
Di cci onar i o de
Mét odos
Super
Sub
Códi gos de Mét odos
Códi gos de Mét odos
. . .
. . .
. . .
. . .
. . .
. . .
Obj et os
Obj et os
Obj et os
Obj et os
Referencia:
Formato de un archivo .class
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
6
¿Cómo funciona la JVM?
• Arma la estructura de clases en memoria.
• Busca la clase con el método “main” y le dá
control.
– La clase “main” crea los objetos necesarios.
– Registra Eventos, Observados y Observadores.
– Generalmente queda a la espera de un evento.
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
7
El Class Loader
• Es el encargado de cargar las clases en
Memoria.
– Llama a findLoadedClass para ver si la clase
se encuentra en memoria.
– Si no es así, llama a loadClass de la
superclase (modelo de delegación).
– Si el paso anterior no produjo una clase
. . . . . . . . . . . . . . . . . . . . .
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
8
El Class Loader (2)
– Si el paso anterior no produjo una clase
• Llama a findClass para encontrar la clase en el
ClassPath (o en .)
• Si la encuentra:
– lee los bytecodes en un arreglo
– crea la clase con defineClass
• Si no tuvo éxito, arroja
ClassNotFOundException
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
9
El Class Loader (3)
• Un ClassLoader se crea con:
– ClassLoader ()
– ClassLoader (ClassLoader Parent)
• Así permite “insertar” una rutina para
modificar el comportamiento de la carga de
clases.
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
10
Threads en Java
• Los threads son procesos “peso pluma” (lightweight
process).
– El programador crea los threads.
• Un thread puede controlar varios objetos
– La JVM tiene un planificador default para los threads.
Puede cambiarse.
• En un objeto puede haber mas de un thread
simultáneamente.
– Hay herramientas para controlar la concurrencia.
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
11
Reflection (MetaProgramación en
Java)
• En Java, una Class también es un Objeto.
• Es un objeto del tipo Class.
– Se puede obtener la clase de un Objeto usando el
método get Cl ass( ) de la clase Obj ect .
– Se pueden obtener las interfaces implementadas
con get I nt er f aces( ) .
– A partir de ahí se puede manipular en forma
indirecta al objeto.
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
12
Reflection
• Se manipulan:
– Campos: get Fi el ds ( ) ;
– Métodos: get Met hods( ) ;
– Constructores: get Decl ar edConst r uct or s();
• los métodos se invocan con i nvoke( . . . ) ;
• los valores con get xxx( ) y set xxx( ) ;
• y así siguiendo …
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
13
Cargando Nuevo Código
● Haciendo uso de Reflection, Java puede
cargar código generado dinámicamente.
● Esto se asemeja a las bibliotecas
dinámicas en tiempo de ejecución.
● Ejemplo: HelloWorldGenerator
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
14
HelloWorldGenerator
import java.io.*;
import java.lang.reflect.*;
public class HelloWorldGenerator {
public static void main( String[] args ) {
try {
FileOutputStream fstream = new
FileOutputStream( "HelloWorld.java" );
PrintWriter out = new PrintWriter( fstream );
out.println( "class HelloWorld { \n"
+ " public static void main( String[] args ) { \n"
+ " System.out.println( \"Hola che!\" );\n"
+ " } \n"
+ "} " );
out.flush();
. . . . . . . . .
// sigue
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
15
HelloWorldGenerator (2)
System.out.println ("Compilando ...");
Process p = Runtime.getRuntime().exec( "javac HelloWorld.java" );
p.waitFor();
System.out.println ("Ejecutando ...");
if ( p.exitValue() == 0 ) {
Class outputClassObject = Class.forName( "HelloWorld" );
Class[] fpl = { String[].class };
Method m = outputClassObject.getMethod( "main", fpl );
m.invoke( null, new Object[]{ new String[] {} } ); }
else {InputStream errStream = p.getErrorStream();
for ( int j = errStream.available(); j > 0; j-- )
System.out.write( errStream.read() ); } /* end if p.exitValue()
*/
} catch(Exception e){ throw new RuntimeException(e); }
}/* end main */
}/* end class */
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
16
Enterprise Java Beans
• Una especificación que provee la definición de
servicios para aplicaciones.
• Algunas de estas definiciones son interfaces.
Otras son servicios como persistencia
– El constructor de una aplicación debe implementar las
interfaces.
– Un application server se encarga de su administración y
manejo.
– Los objetos de estas clases se llaman componentes.
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
17
Java 2 Enterprise Edition
• Es una plataforma para el desarrollo de software multicapa,
modular, basado en componentes, corriendo en un servidor
de aplicaciones.
• Java Beans es una de las especificaciones de J2EE.
• Otras especificaciones son:
– javax.servlet
– javax.servlet.jsp
– javax.naming
– java.sql, javax.sql
– java.transaction
– javax.xml.*
– javax.jms.*
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
18
Objetos Distribuidos
● Objetos diseñados para trabajar en conjunto.
– Pero que residen en
● Máquinas Diferentes.
● Procesos diferentes en la misma máquina.
– CORBA, DCOM (Microsoft), DDOBJECTS
(Delphi), Pyro (Python), Druby (Ruby),
Replica (C++)
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
19
Java RMI
• Un objeto Java puede invocar a un método de otro
objeto Java en otra java Virtual Machine.
– El que llama debe implementar java.rmi.Remote,
– El que recibe el llamado debe extender
java.server.UnicastRemoteObject.
• La llamada a métodos remotos es independiente de la
capa de red y de la de transporte.
• Se trata de un servicio de capa de aplicación parecido
al remote procedure call (RPC)
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
20
Distribuidos + Reflection=JINI
• Actualmente River de Apache Incubator
• Usando Objetos Distribuidos y Reflexión puede lograrse
que objetos clientes y servidores se encuentren en una
red para cumplir una tarea.
• Es una especificación co-operable con UPnP.
– Permite auto-reconfiguración.
– Se adapta rápidamente a los cambios (resiliencia).
– Permite integración de componentes nuevos o viejos encapsulados.
– Es gratuita.
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
21
Frameworks
• Conjunto de clases cooperantes.
• Las API de Java son un ejemplo de Framework.
• Las MFC son otro ejemplo.
• Permiten reusar lógica y código.
• Las aplicaciones se programan usando la jerarquía de
clases ya existentes.
• La clases existentes del Framework brindan el
comportamiento general de la aplicación.
• Las nuevas clases extienden al Framework (seamless
integration).
FIUBA 2007
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clíúa
22
Comentarios de: Aspectos Internos de la Programación Orientada a Objetos (0)
No hay comentarios