por Gilberto Pacheco Gallegos
Este sitio presenta contenido sobre programación orientada a objetos en JavaScript
Es la continuación de https://gilpgijs.github.io.
Los temas de HTML, CSS y animaciones se han movido al sitio https://gilpgihc.github.io.
Los temas de bases de datos se han movido al sitio https://gilpgiw.github.io.
Puedes ver el listado de mis sitios educativos en https://gilpgcl.github.io.
Los siguientes controles te permitirán navegar por todo el contenido del sitio.
Oculta el menú de navegación.
Muestra el menú de navegación.
Regresa a la página anterior.
Avanza a la página siguiente.
En esta lección se presenta el concepto de función.
Secuencia de instrucciones que tiene asociado un nombre.
El nombre de una función es un identificador.
Una función se declara de una forma parecida a la siguiente:
Una función no se ejecuta ella misma.
Se usa una instrucción llamada invocación de función, que
consiste en el nombre de la función, seguida de paréntesis; por ejemplo, si
una función se llama
saluda
,
para hacer que se ejecute, hay que colocar la instrucción
saluda()
Antes de que una función se ejecute, se suspende lo que se estaba haciendo y se marca el punto donde se invocó, posteriormente, se ejecuta la función y al terminar, se regresa al punto de invocación y se continúa con la siguiente instrucción.
En JavaScript, las variables declarades en el mismo espacio que la declaración de una función, se pueden usar dentro de la función.
pp adios
pp qk adios
global-1 c2 global-2 c1-1 c2 c1-2 global-3
m1 1 3
13 ggg
18 6 33 65
hola -11 -60 mx 4
Invoca: 2, 3 Invoca: 1 , 3 Invoca: 0 , 3 Devuelve 3 Devuelve: 4 Devuelve: 5 5
En esta lección se definieron los siguientes conceptos:
Función.
Invocación de funciones más de una vez.
Funciones que invocan funciones.
Paso de parámetros.
Funciones con expresiones en los parámetros.
Funciones flecha.
Recursividad.
En esta lección se introduce el concepto de objeto y sus características básicas.
Los datos y funciones asociados con un objeto en JavaScript reciben el nombre de property o propiedad.
Las funciones asociadas con un objeto se llaman método.
Los datos asociados con un objeto en general se llaman atributo o campo.
Las propiedades de un objeto al momento de diseño deben ser
características directas del objeto, por ejemplo nombre
. No
es válido que describan características de otros objetos; por
ejemplo, si un objeto es una película, no es válido ponerle el
atributo .
nombreDelDirector
Hola. { nombre: 'pp', color: 'marrón', saluda: [Function] } pp marrón null
{ saludo: [Function], nombre: 'pp' } pp Bye
string
10 o true 1 5 HOLA MUNDO hola mundo la M la Mundo h Ajua Hola Mundo hAjuaHola Mundo
string
true 8 1000 8.00
string
a number
8 8 8 15 15 8.33
En esta lección se definieron los siguientes conceptos:
Creación de objetos paso a paso.
Literales de objeto.
Propiedades y métodos de
string
.
Conversión a
string
.
Conversión de
string
a
number
.
En esta lección se introduce el concepto clase.
class
Hola. Soy vl.
6
class Cl01
1 class Cl01 { constructor(b) { this.a = b } mensaje(c) { console.log(c + this.a) } } const a = new Cl01(4) a.mensaje(2)
1Cl01 | 11 |
---|
name | Cl01 |
---|
new
1 class Cl01 { constructor(b) { this.a = b } mensaje(c) { console.log(c + this.a) } } const a =2new Cl01(4) a.mensaje(2)
1Cl01 | 11 |
---|
name | Cl01 |
---|
Se crea un objeto de la clase Cl01, sin ninguna property y se le asigna un identificador, que en este caso es 2.
Cl01(4)
1 class Cl01 { constructor(b) { this.a = b } mensaje(c) { console.log(c + this.a) } } const a =2new3Cl01(4) a.mensaje(2)
1Cl01 | 11 |
---|---|
3congela |
name | Cl01 |
---|
3new Cl01(4)
2 Cl01(4)
constructor(b)
1 class Cl01 { 4 constructor(b) { this.a = b } mensaje(c) { console.log(c + this.a) } } const a =2new3Cl01(4) a.mensaje(2)
name | Cl01 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
this.a = b
1 class Cl01 { 4 constructor(b) { 5 this.a = b } mensaje(c) { console.log(c + this.a) } } const a =2new3Cl01(4) a.mensaje(2)
name | Cl01 |
---|
5a | 54 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
5this.a = b
2 .a = 4
}
1 class Cl01 { 4 constructor(b) { 5 this.a = b 6 } mensaje(c) { console.log(c + this.a) } } const a =2new3Cl01(4) a.mensaje(2)
name | Cl01 |
---|
5a | 54 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
5this.a = b
2 .a = 4
Termina el registro de activación y devuelve el valor de this, que es 2.
new Cl01(4) → 2
1 class Cl01 { 4 constructor(b) { 5 this.a = b 6 } mensaje(c) { console.log(c + this.a) } } const a =2new3Cl01(4)7→2 a.mensaje(2)
name | Cl01 |
---|
5a | 54 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
5this.a = b
2 .a = 4
a = 2
1 class Cl01 { 4 constructor(b) { 5 this.a = b 6 } mensaje(c) { console.log(c + this.a) } } 8 const a =2new3Cl01(4)7→2 a.mensaje(2)
name | Cl01 |
---|
5a | 54 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
5this.a = b
2 .a = 4
Crea la constante de referencia a en el stack, cuyo valor es el devuelto por el constructor.
a.mensaje(2)
1 class Cl01 { 4 constructor(b) { 5 this.a = b 6 } mensaje(c) { console.log(c + this.a) } } 8 const a =2new3Cl01(4)7→2 9 a.mensaje(2)
name | Cl01 |
---|
5a | 54 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
5this.a = b
2 .a = 4
9a.mensaje(2)
2.mensaje(2)
a.mensaje
.
mensaje(c) {
1 class Cl01 { 4 constructor(b) { 5 this.a = b 6 } 10 mensaje(c) { console.log(c + this.a) } } 8 const a =2new3Cl01(4)7→2 9 a.mensaje(2)
name | Cl01 |
---|
5a | 54 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
5this.a = b
2 .a = 4
9a.mensaje(2)
2.mensaje(2)
10this.mensaje(c)
c + this.a
1 class Cl01 { 4 constructor(b) { 5 this.a = b 6 } 10 mensaje(c) { console.log(11c + this.a) } } 8 const a =2new3Cl01(4)7→2 9 a.mensaje(2)
name | Cl01 |
---|
5a | 54 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
5this.a = b
2 .a = 4
9a.mensaje(2)
2.mensaje(2)
10this.mensaje(c)
11c + this.a
2 + 4
6
console.log(c + this.a)
1 class Cl01 { 4 constructor(b) { 5 this.a = b 6 } 10 mensaje(c) { 12 console.log(11c + this.a) } } 8 const a =2new3Cl01(4)7→2 9 a.mensaje(2)
name | Cl01 |
---|
5a | 54 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
5this.a = b
2 .a = 4
9a.mensaje(2)
2.mensaje(2)
10this.mensaje(c)
11c + this.a
2 + 4
6
Se muestra el resultado de la expresión 11.
}
1 class Cl01 { 4 constructor(b) { 5 this.a = b 6 } 10 mensaje(c) { 12 console.log(11c + this.a) 13 } } 8 const a =2new3Cl01(4)7→2 9 a.mensaje(2)
name | Cl01 |
---|
5a | 54 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
5this.a = b
2 .a = 4
9a.mensaje(2)
2.mensaje(2)
10this.mensaje(c)
11c + this.a
2 + 4
6
1 class Cl01 { 4 constructor(b) { 5 this.a = b 6 } 10 mensaje(c) { 12 console.log(11c + this.a) 13 } } 8 const a =2new3Cl01(4)7→2 9 a.mensaje(2)14
name | Cl01 |
---|
5a | 54 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
5this.a = b
2 .a = 4
9a.mensaje(2)
2.mensaje(2)
10this.mensaje(c)
11c + this.a
2 + 4
6
Descongela el último registro de activación congelado en el stack.
Como no hay más instrucciones, Elimina el registro de activación y termina el programa.
Hola. Clase QK. Hola. Instancia qkita1 Hola. Instancia qkita2
En JavaScript por el momento todos los miembros de una clase son públicos, pero se pueden usar convenciones para indicar niveles de acceso.
Como hay varias convenciones, usaremos las del compilador de TypeScript, que Visual Studio Code puede usar para validar el acceso.
@public
Es el valor predefinido e indica que el miembro puede usarse desde cualquier parte del código.
@private
_miembro
El miembro solo debe usarse dentro de la clase que lo define.
@protected
El miembro solo debe usarse dentro de la clase que lo define y subclases.
pp pp juega
En esta lección se definieron los siguientes conceptos:
class
Instancia de clase
Creación de instancia de clase
getter
setter
En esta lección se introduce el concepto de herencia.
4 -2 4 -2 8 8
Hola. Hola. Consola.
En esta lección se definieron los siguientes conceptos:
Coordinación de constructores en la herencia.
Sobrescritura de métodos en la herencia.
En esta lección se presenta el concepto de arreglo y la forma de procesarlo.
[ 'mx', 'my', 'mu' ] 3 mx my mu mx ho
mx my mu adios
for-of
mx my mu adios
for-each
mx my mu adios
[ Clao { a: -3 }, Clao { a: 4 }, Clao { a: 8 } ] -3 4 8
[ { a: -3 }, { a: 4 }, { a: 8 } ] -3 4 8
forEach
con objetos-3 4 8
map
filter
join
reduce
sort
Set
En esta lección se definieron los siguientes conceptos:
Arreglos básicos.
Uso de contadores para procesar arreglos.
La estructura
for-of
para procesar arreglos.
El método
forEach
de arreglos.
Arreglos de instancias de clases.
Arreglos de literales de objetos.
El método
forEach
de arreglos de objetos.
El método
map
.
El método
filter
.
El método
join
.
El método
reduce
.
El método
sort
.
Encadenamiento de métodos.
El tipo de datos
Set
.
En esta lección se presenta el concepto de polimorfismo.
En este ejemplo no se invoca el método en super; aunque es recomendable invocarlo, hay que estudiar bien la lógica del programa.
Adios Bye
Hola Hi
Hola Hi
Soy LeBron Encesto Soy Lionel Anoto gol
En esta lección se introdujeron los siguientes conceptos:
Polimorfismo con sobrescritura de métodos.
Polimorfismo con interfaces.
Polimorfismo con clases abstractas.
En esta lección se presenta el concepto de excepciones y como procesarlas.
throw
Cuando una instrucción no puede completarse por algún error, debe
abortar usando la instrucción
throw new Error(mensaje)
A este proceso se le llama Lanzar una excepción.
La instrución
Error: throw aborta el programa
Los errores generados por la instrucción
throw
pueden procesarse de varias formas que se verán a continuación.
try-catch
Para procesar los errores, la instrucción
throw
debe ejecutarse dentro de las llaves de
try
.
Si llega al final de las llaves de
try
sin lanzar ninguna excepción, se hace lo siguiente:
La cláusula
catch
y las
instrucciones para procesar la excepción
no se ejecutan.
Continua con las instrucciones que vengan después de la estructura
completa
try-catch
.
Si se lanza una excepción dentro de las llaves de
try
,
se hace lo siguiente:
Las restantes instrucciones hasta cerrar llaves no se ejecutan.
Se toma la excepción lanzada; a este proceso se le llama atrapar la excepción.
La excepción atrapada se pasa como parámetro a la cláusula
catch
el flujo normal se restablece y se ejecutan las
instrucciones para procesar la excepción.
Continua con las instrucciones que vengan después de la estructura
completa
try-catch
.
Ejecuta bien Continúa normal Intenta seguir Procesa el error: Fallo Adios
try-finally
Las instrucciones que están dentro de
finally
siempre se ejecutan.
Si llega al final de las llaves de
try
sin lanzar ninguna excepción, se hace lo siguiente:
Las
instrucciones que siempre se ejecutan
de la cláusula
finally
se ejecutan.
Continua con las instrucciones que vengan después de la estructura
completa
try-finally
.
Si se lanza una excepción dentro de las llaves de
try
,
se hace lo siguiente:
Las restantes instrucciones hasta cerrar llaves no se ejecutan.
Las
instrucciones que siempre se ejecutan
de la cláusula
finally
se ejecutan.
Continúa lanzando la excepción.
Sin error Si se ejecuta Continua sin falla Ejecuta con error
Error: A volar
try-catch-finally
Es una combinación de las 2 anteriores. Siempre restablece el fujo normal y
siempre se ejecutan las
instrucciones que siempre se ejecutan
de la cláusula
finally
Si llega al final de las llaves de
try
sin lanzar ninguna excepción, se hace lo siguiente:
La cláusula
catch
y las
instrucciones para procesar la excepción
no se ejecutan.
Continua con las
instrucciones que siempre se ejecutan
de la cláusula
finally
.
Continua con las instrucciones que vengan después de la estructura
completa
try-catch-finally
.
Si se lanza una excepción dentro de las llaves de
try
,
se hace lo siguiente:
Las restantes instrucciones hasta cerrar llaves no se ejecutan.
Se atrapa la excepción y se pasa como parámetro a la cláusula
catch
.
Se ejecutan las instrucciones para procesar la excepción. y el flujo normal se restablece.
Continua con las
instrucciones que siempre se ejecutan
de la cláusula
finally
.
Continua con las instrucciones que vengan después de la estructura
completa
try-catch-finally
.
Restablece Ouch finally se ejecuta Esto se realiza Try exitoso. finally se hace Esto se hace
Empezamos ¿Fallaremos? Fallamos Terminamos
En esta lección se presentaron los siguientes conceptos:
throw
.
try-catch
.
try-finally
.
try-catch-finally
.
try
anidado.
Formulario con excepciones.
En esta lección se presenta el concepto de promesa y como procesarla.
Éxito 1: Hola Fallo 2: ouch
async-await
Éxito 1: Hola Falló 2: ouch
Éxito 1 Hola Falló 2: ouch
Promise.all
Éxito 1: Éxito[a],Éxito[z],Éxito[b] Falló 2: Falla[]
En esta lección se revisaron los siguientes conceptos:
Promise.resolve
Promise.reject
async-await
Creación de promesas
Promise.all
En esta lección se presentan distintos tipos de asociaciones.
Una sonaja tiene como dueño a un bebé.
Una infante tiene muchos juguetes.
Un piloto pilotea un avión.
Un avión es piloteado por un piloto.
Un juguete2 pertenece a un infante2.
Un infante2 tiene muchos juguetes2.
Un usuario usa muchas computadoras.
Una computadora es usada por muchos usuarios.
Asociación binaria.
Un objeto se forma con partes independientes.
Asociación binaria.
Un objeto se forma con partes que no pueden existir sin el objeto principal.
En esta lección se revisaron los siguientes de asociaciones:
A uno.
A muchos.
Uno a uno
.
Uno a muchos
.
Muchos a muchos
.
Agregación.
Composición.
En esta lección se presenta el concepto de patrón de diseño y algunos ejemplos.
Técnicas para resolver un problema común en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.
Un patrón de diseño resulta ser una solución a un problema de diseño. Para que una solución sea considerada un patrón debe poseer ciertas características:
Haber comprobado su efectividad resolviendo problemas similares en ocasiones anteriores.
Debe ser reutilizable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias.
Un sitio donde vienen explicados los patrones de diseño es: https://www.oodesign.com/
Design Patterns. Elements of Reusable Object-Oriented Software - Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides - Addison Wesley (GoF- Gang of Four)
Es un mecanismo para tener una sola instancia de una clase.
Es un mecanismo para crear objetos de una forma dinámica.
Es un mecanismo en el que el acceso a un objeto se hace usando otro objeto que lo representa.
Es un mecanismo para organizar programas que usan interfaces gráficas. Hay muchas versiones de este patrón.
En esta lección se revisaron los siguientes conceptos:
Patrón de diseño
El patrón singleton
El patrón factory.
El patrón proxy.
El patrón MVC.