Abstracción funcional en Java y Pascal
1. Java
En el lenguaje Java, toda sentencia ejecutable tiene que estar dentro de un método (función), que a su vez tiene que estar obligatoriamente dentro de una clase. Es puramente orientado a objetos. Si lo comparamos con C++ este sí que permite crear una función fuera de una clase.
La orientación a objetos por tanto, lleva consigo una encapsulación. Los métodos que se necesitan para manejar un objeto estarán incluidos en el.
Además podemos definir el ámbito de un subprograma con las palabras reservadas private, public y protected.
Tambien podemos especificar si un método se aplica a un objeto de la clase, o a la clase. Esto lo hacemos mediante static.
En Java podemos sobrecargar un método, es decir, declaramos dos subprogramas con el mismo nombre pero con distinto número de parámetros o simplemente con distinto tipo.
Lo que no puede sobrecargar el programador es un operador.
En java el paso de parámetros se realiza de distinta manera según sea para tipos primitivos u objetos:
Tipos primitivos: serían los tipos numéricos int y float, y otros como char y boolean. Ojo con String, que ya es una clase, no un tipo primitivo. En este caso Java pasará siempre los parámetros por valor.
Objetos: Conociendo Java se sabe que no existen punteros. Sin embargo, toda variable que no sea tipo primitivo, será una referencia a un espacio de memoria, y a la hora de pasar los parámetros siempre se hará por referencia. Por tanto en Java trabajaremos siempre con referencias en lo referido a objetos.
2. Pascal
Pascal es un lenguaje en el que nosotros podemos definir procedimientos y funciones (subprogramas). Su finalidad sería la de aligerar el contenido del cuerpo principal del programa dentro de su filosofía "divide y vencerás". Por ejemplo si una operación con múltiples operaciones se realiza a menudo, definimos un subprograma que nos realice ese trabajo cuando lo llamamos.
Dentro de los subprogramas de Pascal tenemos los tipos mencionados:
Función: Subprograma que devuelve o retorna un valor. El tipo de este valor ha de ser un tipo primitivo.
Procedimiento: Subprograma que no devuelve ningún valor.
El paso de parámetros por defecto en Pascal es por valor. Si queremos que el paso de parámetros sea por referencia lo tendremos que indicar. Existen dos palabras reservadas:
Const: Indica que se pasa el parámetro por referencia pero que no se puede modificar.
Var: Indica que se pasa por referencia y las modificaciones hechas dentro del subprograma, modificarán la variable.
En Pascal no se permite el polimorfismo de subprogramas.
3. Similitudes
Los dos lenguajes utilizan únicamente el paso de parámetros por valor y por referencia. Solamente de estas dos formas.
En los dos lenguajes, los subprogramas pueden devolvernos un resultado.
A un subprograma se le pueden pasar parámetros de entrada, de salida, o de entrada salida.
4. Diferencias
En Java, toda sentencia ejecutable tiene que estar dentro de un método y a su vez dentro de una clase. Pascal, al no ser un lenguaje orientado a objetos como Java, no contiene clases.
En Java podemos sobrecargar métodos, mientras que en Pascal no se pueden sobrecargar funciones ni procedimientos.
Pascal no permite el polimorfismo de subprogramas, pero Java sí lo permite.
En Java existen las interfaces que son un nivel mas de abstracción, que son como plantillas.
Los subprogramas de Java pueden devolver un tipo de dato no primitivo, Pascal no.
La comprobación de tipos en Java, se puede hacer en tiempo de ejecución.
En Java, el nombre de una variable no primitiva es una referencia. Por ello no podremos pasar los objetos por valor. Y los datos primitivos se pasaran por valor. En Pascal un dato se puede pasar por valor o por referencia sea cual sea el tipo.
Bilbliografia:
Apuntes de PROA,EDI y FP.
Wikipedia
Texto redactado por Madonnita, Pab, lolus y tycoty
