Página 1 de 1

ID 10660 - Tema: 114 - Java Script - Objetos

Publicado: 29 Dic 2015, 19:20
por phdezv
De esta pregunta:

7) Indique la afirmación incorrecta: [MAL]
Tema: 114. Id Pregunta: 10660.
a) JavaScript es orientado a objetos.
b) JavaScript no puede ejecutarse en el lado del servidor.
c) Para interactuar con una página web, JavaScript utiliza una implementación de DOM (Document Object Model).
d) La tecnología AJAX utiliza JavaScript de forma asíncrona.


Según tengo en mis apuntes y confrontando con colegas, JavaScript es BASADO en objetos, pero no orientado, porque no cumple las características de OO.

¿Cómo lo veis?

Re: Java Script - Objetos

Publicado: 29 Dic 2015, 21:06
por Miguelinho
Según tengo entendido JavaScript sí soporta la programación orientada a objetos. Es, pese a ello, un poco "sui generis":
1.- No hay palabras reservadas para la definición de clases y métodos, pero se pueden definir de una forma que yo calificaría como "torticiera".
2.- La herencia se hace a través de prototipos.

No te puedo indicar el libro concreto, pues no lo recuerdo, pero hace tiempo consulté un libro donde se afirmaba explícitamente que JavaScript era Orientado a Objetos. No obstante, me creería que hubiese autores que hiciesen distinciones como la que mencionas.

AÑADIDO: Consulta esta web, viene con un ejemplo.
Enlace: http://viralpatel.net/blogs/object-orie ... avascript/
Personalmente, creo que sí se puede considerar POO, pero es muy chapucero, al menos, para los que venimos de otros lenguajes con más palabras reservadas.

Un saludo,

Miguel

[EDIT para el AÑADIDO]

Re: Java Script - Objetos

Publicado: 30 Dic 2015, 09:12
por NachoMarAr
Yo coincido con Miguelinho. Además, en este caso hay una respuesta falsa muy clara como para pensar que puede ser una pregunta trampa donde el truco esté en la distinción que mencionas

Re: ID 10660 - Tema: 114 - Java Script - Objetos

Publicado: 01 Ene 2016, 19:15
por phdezv
La verdad es que no se me da bien lo de Java y la errónea que dices que es clara no la vi porque, entre otras cosas, en cuanto vi la A como falsa no perdí tiempo en verificar lo demás.

Para que un paradigma, lenguaje, etc. se considere como ORIENTADO a objetos debe tener ciertas características fundamentales (encapsulamiento, herencia, polimorfismo...). Según tengo entendido el JavaScript no admite herencia, por ejemplo.

Re: ID 10660 - Tema: 114 - Java Script - Objetos

Publicado: 03 Ene 2016, 11:10
por NachoMarAr
phdezv escribió:La verdad es que no se me da bien lo de Java y la errónea que dices que es clara no la vi porque, entre otras cosas, en cuanto vi la A como falsa no perdí tiempo en verificar lo demás.

Para que un paradigma, lenguaje, etc. se considere como ORIENTADO a objetos debe tener ciertas características fundamentales (encapsulamiento, herencia, polimorfismo...). Según tengo entendido el JavaScript no admite herencia, por ejemplo.
Como apuntó Miguelinho, la herencia en Javascript se soporta a través de "prototype". Bajo mi punto de vista, Javascript sí es orientado a objetos, pero no de la forma a la que estamos acostumbrados con C++, Java, etc. En estos lenguajes defines clases, y luego las instancias, mientras que en Javascript se suele heredar (mediante prototype) de instancias de objetos ya existentes. Es una filosofía bte diferente, pero orientada a objetos. Y al contrario de lo que opina Miguelinho, yo no la veo "torticera", sino diferente, con sus ventajas e inconvenientes

Re: ID 10660 - Tema: 114 - Java Script - Objetos

Publicado: 03 Ene 2016, 22:29
por Miguelinho
Sí, el calificativo que he brindado a la POO de JavaScript es sólo una opinión personal. Posiblemente, se deba a que he usado JavaScript en un par de webs y no le he sacado todo su potencial. En cambio, estoy más versado, sin ser tampoco un erudito, en Java, C++ y Objective-C.

Una última observación. JavaScript, como C++ o Python, es multiparadigma. No hay porqué sacar partido a la POO y al final, se puede usar un estilo estructurado. Además, los paradigmas de programación no son autoexcluyentes. He leído, por ejemplo, que en Java 8 han introducido cálculo lambda, que es una funcionalidad del paradigma funcional.

¡Y ésa es otra! Los lenguajes de programación están en constante evolución. Aparecen nuevos lenguajes (Dart de Google, Swift de Apple, Hack de Facebook) y los existentes evolucionan.

Un saludo,

Miguel

Re: ID 10660 - Tema: 114 - Java Script - Objetos

Publicado: 03 Ene 2016, 23:33
por Milarqui
La duda es, cual es la respuesta correcta? Es que todavía no me la he cruzado en los tests...

Re: ID 10660 - Tema: 114 - Java Script - Objetos

Publicado: 04 Ene 2016, 00:47
por NachoMarAr
La b. Como ejemplo de javascript en el lado del servidor, Node.js

Re: ID 10660 - Tema: 114 - Java Script - Objetos

Publicado: 06 Ene 2016, 12:30
por Rchins
:arrow:

Re: ID 10660 - Tema: 114 - Java Script - Objetos

Publicado: 06 Ene 2016, 13:41
por Miguelinho
No estoy de acuerdo, Rchins. Insisto en que los lenguajes de programación evolucionan. Depende como se redactase la pregunta, COBOL podría ser una cosa u otra. Al final, todo son matices.

La (b) tiene un matiz que la hace claramente descartable:
b) JavaScript no puede ejecutarse en el lado del servidor.

El "no puede" es fortísimo. Con un ejemplo, como el puesto por NachoMarAr, se viene abajo. Con estos errores, se pierde 1'5 puntos. 0'5 que resta y 1 punto que no sumamos.

Todas las preguntas se deben reflexionar. Cada matiz, cambia el sentido.

Re: ID 10660 - Tema: 114 - Java Script - Objetos

Publicado: 06 Ene 2016, 16:01
por Rchins
:arrow:

Re: ID 10660 - Tema: 114 - Java Script - Objetos

Publicado: 06 Ene 2016, 19:30
por Naranek
Por regla general, hay que tener un cuidado exquisito con los "no nunca" y los "sí siempre".

Re: ID 10660 - Tema: 114 - Java Script - Objetos

Publicado: 24 Ene 2016, 15:07
por phdezv
Gracias a todos por sus aclaraciones y comentarios.

Desde la experiencia con el paradigma OO pero desde la nula experiencia con JavaScript, y de lo que he leído sobre él:

1- Ciertamente los lenguajes evolucionan, pero los paradigmas establecidos no se mueven tanto, tienden a quedarse más quietos. El paradigma OO tiene características y reglas bien establecidas, como lo de la herencia. Puedes "simularla", como el caso de los prototypes, pero no se consideraría herencia propiamente dicha.

2. En el propio tema ASTIC p. 17, como característica básica de JavaScript dice: "Los scripts se ejecutan en el navegador web, no en el servidor".

Habéis comentado sobre Node.js y lo he buscado, encontrando esto en Wikipedia:
Node.js es un entorno en tiempo de ejecución multiplataforma, de código abierto, para la capa del servidor (pero no limitándose a ello) basado en el lenguaje de programación ECMAScript.
ECMAScript se basó fundamentalmente en JavaScript pero no es lo mismo.

Y en la wiki en inglés dice:
Node.js is an open-source, cross-platform runtime environment for developing server-side Web applications. Node.js is not a JavaScript framework,[3] but its applications are written in JavaScript and can be run within the Node.js runtime on a wide variety of platforms.
De todo lo anterior interpreto que lo que se ejecuta en el servidor no es directamente JavaScript sino "dentro de" Node.js. ¿Podría ser?

Perdonad el lío, pero quiero que me quede claro por cualquier pregunta similar que pueda salir en los exámenes.

Re: ID 10660 - Tema: 114 - Java Script - Objetos

Publicado: 26 Ene 2016, 14:02
por NachoMarAr
phdezv escribió:Gracias a todos por sus aclaraciones y comentarios.
Node.js es un entorno en tiempo de ejecución multiplataforma, de código abierto, para la capa del servidor (pero no limitándose a ello) basado en el lenguaje de programación ECMAScript.
ECMAScript se basó fundamentalmente en JavaScript pero no es lo mismo.
Efectivamente, ECMAScript es un estandar que se creó a partir de JavaScript y no son lo mismo, pero Node.js no está basado en ECMAScript, sino en JavaScript. De hecho, está basado en el Chrome's V8 JavaScript engine.
phdezv escribió: Y en la wiki en inglés dice:
Node.js is an open-source, cross-platform runtime environment for developing server-side Web applications. Node.js is not a JavaScript framework,[3] but its applications are written in JavaScript and can be run within the Node.js runtime on a wide variety of platforms.
De todo lo anterior interpreto que lo que se ejecuta en el servidor no es directamente JavaScript sino "dentro de" Node.js. ¿Podría ser?

Perdonad el lío, pero quiero que me quede claro por cualquier pregunta similar que pueda salir en los exámenes.
Efectivamente, las aplicaciones Javascript se ejecutarían en Node.js, del mismo modo que las aplicaciones Java se ejecutan en la JVM (me refiero conceptualmente, técnicamente no se parecen en nada). Y, básicamente, el objetivo de Node.js es poder desarrollar con Javascript aplicaciones web, de ahí que la respuesta b sea cierta. El tema de ASTIC en este punto se ha quedado un poco obsoleto, si bien es cierto que el principal uso de Javascript (y cada día más extendido) sigue siendo en el cliente.

Re: ID 10660 - Tema: 114 - Java Script - Objetos

Publicado: 26 Ene 2016, 19:43
por Miguelinho
phdezv escribió: 1- Ciertamente los lenguajes evolucionan, pero los paradigmas establecidos no se mueven tanto, tienden a quedarse más quietos. El paradigma OO tiene características y reglas bien establecidas, como lo de la herencia. Puedes "simularla", como el caso de los prototypes, pero no se consideraría herencia propiamente dicha.
Diría que no existe una guía exacta o un estándar que precise lo que es y deja de ser la herencia. Cada lenguaje, al final, lo hace un poco a su manera. Objective-C es orientado a objetos y desde mi perspectiva, no tiene nada que ver con Java, por ejemplo.

Según la Wikipedia, JavaScript es orientado a objetos (si bien, precisan que está basado en prototipos)
Paradigm: Multi-paradigm: scripting, object-oriented (prototype-based), imperative, functional
Fuente: https://en.wikipedia.org/wiki/JavaScript

Haces bien en querer disipar tus dudas, pero en este tema, como en otros del mundillo de la informática, la terminología no es exacta y al final, dependerá del criterio del Tribunal.