que trabaje con figuras geométricas planas. figura y...

31
Ejemplo Supongamos que queremos realizar un sistema que trabaje con figuras geométricas planas. El sistema debe poder mostrar información de una figura y calcular su área. Se manejarán varios tipos de figuras entre ellas, círculos y rectángulos. Dos aproximaciones Sin utilizar las técnicas de la POO Se utilizará código C para la descripción del programa Utilizando las técnicas de la POO Se utilizará un pseudocódigo para describir el programa

Transcript of que trabaje con figuras geométricas planas. figura y...

Page 1: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Ejemplo

• Supongamos que queremos realizar un sistema que trabaje con figuras geométricas planas.

• El sistema debe poder mostrar información de una figura y calcular su área.

• Se manejarán varios tipos de figuras entre ellas, círculos y rectángulos.

• Dos aproximaciones – Sin utilizar las técnicas de la POO

• Se utilizará código C para la descripción del programa

– Utilizando las técnicas de la POO • Se utilizará un pseudocódigo para describir el programa

Page 2: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Sin POO (I)

#define Tcirculo 1

#define TRectangulo 2

typedef struct circulo{

short tipo; //tipo de figura

double x, y;//centro

double radio;//radio

}Circulo;

typedef struct rectangulo{

short tipo; //tipo de figura

double x1, y1;//esquina ini

double x2, y2;//esquina fin

} Rectangulo;

typedef union figura{

short tipo; /*tipo de figura*/

Circulo cir; /*circulo */

Rectangulo rec;/*rectangulo*/

} Figura;

/*Prototipo de funciones*/

double area( Figura *p_fig);

void muestra( Figura *p_fig);

Page 3: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Sin POO (II)

/*Funcion que calcula el area*/

double area( Figura *p_fig){

double varea;

/*se maneja el area dependiendo del tipo*/

switch(p_fig->tipo){

case TCirculo:

varea = M_PI * p_fig->cir.radio * p_fig->cir.radio;

break;

case TRectangulo:

varea = (p_fig->rec.x2 * p_fig-> rec.x1) *

(p_fig->rec.y2 * p_fig-> rec.y1);

break;

default:

printf(“Figura desconocida\n”);

varea = -1;

}

return varea;

}

Page 4: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Sin POO (III)

//Funcion que muestra la figura

double muestra( Figura *p_fig){

printf(“Figura: ”);

switch( p_fig->tipo){

case TCirculo:

printf(“Circulo de radio %f y de centro(%f,%d)\n ”,

p_fig->cir.radio,

p_fig->cir.x,

p_fig->cir.y);

break;

case TRectangulo:

printf(“Rectangulo esquina (%f,%f) y (%f,%f) \n ”,

p_fig->rec.x1,

p_fig->rec.y1,

p_fig->rec.x2,

p_fig->rec.y2);

break;

default:

printf(“Figura desconocida\n”);

}

}

Page 5: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Sin POO (IV) int main(){

int i;

Figura a[2]; //array con dos figuras

//inicializa a[0] con un rectangulo

a[0].tipo = Trectangulo;

a[0].rec.x1 = 80.0;

a[0].rec.y1 = 30.0;

a[0].rec.x2 = 300.0;

a[0].rec.y2 = 50.0;

//inicializa s[1] con un circulo

a[1].tipo = TCirculo;

a[1].cir.radio = 80.0;

a[1].cir.y = 40.0;

a[1].cir.x = 30.0;

//Calculo de áreas

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

printf(“Area figura[%d]=%f\n”,i, area(&a[i]));

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

muestra(&a[i]);

return 0;

}

Page 6: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Sin POO (y V)

• Añadiendo una nueva figura. Queremos incorporar triángulos. – Añadir el tipo de Triangulo

#define Ttriangulo 3

typedef struct Triangulo{

short tipo; //tipo de figura

double x1,y1;//coordenada pto 1

double x2,y2;//coordenada pto 2

double x3,y3;//coordenada pto 3

}Triangulo;

– Añadirlo a la unión de figuras

typedef union Figura{

short tipo;

Circulo cir;

Rectangulo rec;

Triangulo tri;

}Figura; – Modificar las funciones muestra y área

Page 7: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Con POO (I)

• Creamos una clase abstracta Figura. Esta clase soporta los métodos muestra y

area

Clase Figura

Métodos de instancia publicos

muestra()

area()

Fin clase

Figura::muestra(){

printf(«Debe implementarla la subclase»);

}

Figura::area(){

printf(«Debe implementarla la subclase»);

return 0.0;

}

Page 8: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Con POO (II)

• Creamos Circulo como una subclase de Figura.

Clase Circulo hereda Figura

Variables de instancia

radio x, y;

Fin clase

/* Implementación de muestra para Circulo*/

Circulo::muestra(){

printf(«Circulo de radio %f y de centro (%f,%f)\n»,radio,x,y);

}

/* Implementación de area para Circulo*/

Circulo::area(){

return M_PI * radio * radio;

}

Page 9: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Con POO (III)

• Creamos Rectangulo como una subclase de Figura.

Clase Rectangulo hereda Figura

Variables de instancia

x1, y1, x2, y2;

Fin clase

// Implementación de muestra para Rectangulo

Rectangulo::muestra(){

printf(«Esquinas del Rectangulo (%f, %f) y (%f,%f)\n», x1,y1,

x2,y2);

}

// Implementación de area para Rectangulo

Rectangulo::area(){

return fabs( (x2-x1)*(y2-y1));

}

Page 10: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Con POO (IV)

int main(){

int i;

Figura s[2];

//Inicialización de un rectangulo

s[0] = Rectangulo(80,0,30,0,300,0,50,0);

//Inicialización del circulo

s[1] = Circulo(80,0,40,0,30,0);

//Calculo de las áreas

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

printf(«Area figura[%d]=%f\n»,i, s[i].area());

//Mostrando figuras

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

s[i].muestra();

return 0;

}

• Este código no es C++. Está subrayado lo que se debe matizar.

Page 11: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Con POO (V)

• Añadiendo una nueva figura. Queremos incorporar Triangulo.

Clase Triangulo hereda Figura

Variables de instancia

x1, y1, x2, y2, x3, y3;

Fin clase

Triangulo::muestra(){

printf(« ...

}

Triangulo::area(){

return ...

}

Page 12: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Introducción al lenguaje Java

Page 13: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Indice

1. Introducción histórica. Origen de Java.

2. Características de Java.

3. La máquina virtual de Java. Bytecode.

4. Palabras reservadas.

5. Introducción a la programación orientada a objetos.

6. Diferencias entre C/C++ y Java.

7. Ejemplo: “Hello world”, en el modelo de aplicación clásico.

Page 14: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Lenguajes de programación

• Modelo computacional: colección de valores y operaciones

• Tipos de modelos computacionales (Paradigma): imperativo, funcional, lógico …

• Computación: aplicación de una secuencia de operaciones a un valor para obtener otro

valor

• Programa: especificación de una computación

• Lenguaje de programación: notación para escribir programas

• Sintaxis de un lenguaje de programación: estructura o forma de los programas

• Semántica de un lenguaje de programación: relaciones entre un programa y un modelo

de computación

• Pragmática de un lenguaje de programación: grado de éxito con el que un programa

cumple sus objetivos tanto en su fidelidad con el modelo de computación subyacente

como su utilidad para los programadores

Page 15: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Introducción histórica(I)

• CPLBCPL B C C++ Java

• CPL (Combined Programming Language): 1960, basado

en ALGOL 60.

• BCPL (Basic Combined Programming Language ): Martin

Richards, 1966.

• B: Ken Thompson y Dennis Ritchie, reemplazado por C

(1969).

• C: Bell Telephone Laboratories (1972) por Dennis Ritchie

para usarlo con Unix. ( Propósito general, Estructurado por

bloques, Imperativo, Procedimientos)

• C++: Bjarne Stroustrup (1979) Bell Labs.

Page 16: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Java

• Sun Microsystems (1995)

• Sintaxis deriva de C y C++.

• Orientado a Objetos

• Compilado a bytecode. Ejecutado sobre cualquier Java virtual machine (JVM). Sobre cualquier arquitectura.

• Desde 1995 Sun desarrolla e implementa compiladores, máquinas virtuales y librería de clases.

Page 17: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Características de Java

• Simple y seguro

• Portable

• OOP

• Robusto

• Multihilo

• Neutral

• Interpretado

• Rendimiento

• Distribuido

• dinámico

Page 18: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Interprete & Compilador

• Un Intérprete es un

traductor que toma el

programa fuente y lo

traduce y ejecuta lína a

línea.

• Basic, Java, Smalltalk.

• Un Compilador de un

programa que traduce los

programas escritos en

lenguaje de alto nivel a

lenguaje máquina.

• C, C++, Pascal, Fortran,

Cobol.

Programa Fuente

Intérprete

Traduc.y ejec.

Línea a línea

Programa Fuente

Compilador

Programa Objeto

Page 19: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

La máquina virtual de Java:

Bytecode.

Programa Java

Compilador

Intérprete

MiPrograma.java

MiPrograma.class

00110100

Page 20: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Programa Java Compilador

Intérprete

MiPrograma.java

PC-compatible

Windows NT

Intérprete Intérprete

Sun Ultra

Solaris

Power Macintosh

System 8

Page 21: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Application Programming Interface

(API)

• Una Application Programming Interface (API) es un conjunto de funciones, procedimientos o clases que un sistema operativo, librería o servicio proporciona para soportar peticiones realizadas por un programa de ordenador.

• Son dependientes de lenguaje, ya que están disponibles solo en un lenguaje de programación particular. Utilizan la sintaxis y elementos de los lenguajes de programación para hacer que sea adecuada para usarla en un contexto particular.

• Son independientes del lenguaje, ya que están escritas en una forma en que pueden ser llamadas desde diferentes lenguajes de programación. Esta característica se conoce como API al estilo servicio, ya que no limita a un proceso particular o sistema y está disponible como una llamada a procedimiento remoto.

Page 22: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

La máquina virtual de Java

Máquina Virtual de Java

Programa Java

API Java

Plataforma basada en hardware

Plataforma

Java

Page 23: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++
Page 24: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Palabras reservadas (I) abstract

Especifica la clase o método que se va a implementar más tarde en una subclase.

boolean

Tipo de dato que sólo puede tomar valores true o false.

break

Sentencia de control para salirse de los bucles.

byte

Tipo de dato que soporta valores en 8 bits.

byvalue

Reservada para uso futuro.

case

Se utiliza en las sentencias switch para indicar bloques de texto.

cast

Reservada para uso futuro.

catch

Captura las excepciones generadas pro las sentencias try.

char

Tipo de dato que puede soportar caracteres Unicode sin signo en 16 bits.

class

Declara una clase nueva.

const

Reservada para uso futuro.

continue

Devuelve el control a la salida de un bucle.

default

Indica el bloque de código por defecto en una sentencia switch.

do

Inicia un bucle del tipo do-while.

double

Tipo de dato que soporta números en coma flotante, 64 bits.

else

Indica la opción alternativa en una sentencia if.

extends

Indica que una clase es derivada de otra o de una intefaz.

final

Indica que una variable soporta un valor constante o que un método no se sobrescribirá.

Page 25: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Palabras reservadas (II) finally

Indica un bloque de código en una estructura try-catch que siempre se ejecutará.

float

Tipo de dato que soporta un número en coma flotante de 32 bits.

for

Utilizado para iniciar un bucle for.

future

Reservada para uso futuro.

generic

Reservada para uso futuro.

goto

Reservada para uso futuro.

if

Evalúa si una expresión es verdadera o falsa y la dirige adecuadamente.

implements

Especifica que una clase implementa una interfaz.

import

Referencia a otras clases.

inner

Reservada para uso futuro.

instanceof

Indica si un objeto es una instancia de una clase específica o implementa una interfaz específica.

int

Tipo de dato que puede soportar un entero con signo de 32 bits.

interface

Declara una interfaz.

long

Tipo de dato que soporta un entero de 64 bits.

native

Especifica que un método está implementado con código nativo (específico de la plataforma).

new

Crea objetos nuevos.

null

Indica que una referencia no se refiere a nada.

operator

Reservada para uso futuro.

outer

Reservada para uso futuro.

Page 26: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Palabras reservadas (y III)

package

Declara un paquete Java.

private

Especificador de acceso que indica que un método o variable sólo puede ser accesible desde la clase en la que se

está declarando.

protected

Especificador de acceso que indica que un método o variable solo puede ser accesible desde la clase en la que está

declarado ( o una subclase de la clase en la que está declarada u otras clases del mismo paquete).

public

Especificador de acceso utilizado para clases, interfaces, métodos y variables que indican que un tema es accesible

desde la aplicación (o desde donde la clase defina que es accesible).

rest

Reservada para uso futuro.

return

Envía control y posiblemente devuelve un valor desde el método que fue invocado.

short

Tipo de dato que puede soportar un entero de 16 bits.

static

Indica que una variable o método es un método de una clase (más que estar limitado a un objeto particular).

super

Se refiere a una clase base de la clase utilizada en un método o constructor de clase.

switch

Sentencia que ejecuta código basándose en un valor.

synchronized

Especifica secciones o métodos críticos de código multihilo.

this

Se refiere al objeto actual en un método o constructor.

throw

Crea una excepción.

throws

Indica qué excepciones puede proporcionar un método.

transiente

Especifica que una variable no es parte del estado persistente de un objeto.

try

Indica un bloque de código que es comprobado para las excepciones.

var

Reservado para uso futuro.

void

Especifica que un método no devuelve ningún valor.

volatile

Indica que una variable puede cambiar de forma asíncrona.

while

Inicia un bucle while.

Page 27: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Diferencias entre C/C++ y Java

(I) • Java no tiene punteros

• Java no incluye estructuras ni uniones

• No permite la sobrecarga de operadores

• No tiene directiva de preprocesado

• Java no realiza ninguna conversión de tipos automática que signifique una pérdida de precisión

• Todo código está encapsulado en una clase

• No se permiten argumentos por defecto

• No permite la herencia múltiple

Page 28: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Diferencias entre C/C++ y Java

(y II) • Java no tiene destructores (incorpora el método finalize()). Java no tiene el operador delete. (incorpora new como C++, pero no delete)

• Java no utiliza typedef

En Java no es posible declarar enteros sin signo.

Java no incluye la sentencia goto

Los operadores << y >> no están sobrecargados en operaciones de E/S

Los objetos sólo se pasan por referencia. (C++, los objetos se pueden pasar por valor o por referencia)

Page 29: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

// HelloWorld.java

public class HelloWorld {

public static void main(String[] args)

{

System.out.println("Hello, world!");

}

}

Page 30: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

Applet

// Hello.java

import java.applet.Applet;

import java.awt.Graphics;

public class Hello extends Applet {

public void paint(Graphics gc) {

gc.drawString("Hello, world!",

65, 95);

}

}

Page 31: que trabaje con figuras geométricas planas. figura y ...trajano.us.es/~antonio/FdeT/curso2011_12/Tema_1_B.pdf · –Sin utilizar las técnicas de la POO ... Diferencias entre C/C++

<!DOCTYPE HTML PUBLIC

"-//W3C//DTD HTML 4.01//EN“

"http://www.w3.org/TR/html4/strict.dtd">

<!-- Hello.html -->

<html>

<head>

<title>Hello World Applet</title> </head>

<body>

<applet code="Hello" width="200" height="200">

</applet>

</body>

</html>