Java profesional, parte 1 | Kenneth DeLong | Skillshare

Velocidad de reproducción


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      00 bienvenida

      5:40

    • 2.

      01 descripción

      3:39

    • 3.

      02 introducción a Java

      12:31

    • 4.

      03 JavaIDes

      3:26

    • 5.

      04 JavaHelloWorld

      10:27

    • 6.

      05 BasicSyntax

      21:54

    • 7.

      clases de objetos de 06a

      12:39

    • 8.

      Atributos de objetos 06b

      19:48

    • 9.

      Constructores de objetos de 06c

      18:15

    • 10.

      Métodos de objetos 06d

      29:47

    • 11.

      07 Arrays

      26:55

    • 12.

      08 collecciones

      30:20

    • 13.

      09 PolymorphismAndInterfaces

      37:19

    • 14.

      10 herencia

      44:38

    • 15.

      11 conclusión

      1:39

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

113

Estudiantes

--

Proyectos

Acerca de esta clase

Esta es la primera parte de un curso de tres partes de Java diseñado para brindarte el conocimiento necesario para programar en Java a un nivel profesional. En esta primera parte, cubrimos los fundamentos de Java y las instalaciones orientadas de Java, como las clases y el herencia, así como las collections. básicas. La clase incluye un proyecto que vas a codificar desde cero, utilizando los conceptos de cada capítulo para ampliar el proyecto hasta una aplicación de trabajo que aplica varios conceptos orientados en objetos. Los estudiantes deben estar de trabajo para trabajar y deben tener una familiarity previa con algunos conceptos de programación como la variable y las funciones.

Conoce a tu profesor(a)

Teacher Profile Image

Kenneth DeLong

Java and Groovy Programmer

Profesor(a)

Habilidades relacionadas

Desarrollo Lenguajes de programación Java
Level: Intermediate

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

Transcripciones

1. 00 bienvenida: De acuerdo, todos, bienvenidos al trabajo profesional. Por supuesto, mi nombre es Kendall Long. Seré tu instructor y guía a través de este curso. Gracias por elegir este curso. Saltemos y veamos en qué os estáis metiendo. Entonces en este curso, el objetivo realmente es llevarte de alguien que tiene muy poca familiaridad con Java a alguien que tiene una comprensión bastante amplia de las viejas piezas clave de cómo es un trabajo moderno una plataforma. Y realmente, Mike, mi verdadero objetivo es darte las herramientas que necesitas para funcionar en un entorno de programación profesional . En realidad no. Solo para hacer como tu primer programa hola Mundo o Teoh haz un pequeño truco aquí. Están en Java, pero realmente para darte como toda la suite de conocimientos que necesitas saber, para estar trabajando en un entorno profesional. Entonces, ¿quién soy yo otra vez? Mi nombre es Kendall Long. Llevo escribiendo software desde alrededor de los 19 años ochenta, y a principios de los noventa cambié de una especie de mi fondo C y FORTRAN a empezar a usar lenguajes orientados a objetos. Y en 1997 me pasé a usar Java y Eso es más o menos todo en lo que he estado programando desde entonces. He programado dunce, una justa cantidad de programación python y un par de sus lenguajes flecos. Um, hice alrededor de 2008 tropezar con el lenguaje groovy, que es una especie de versión supercargada de Java. Um, en realidad tengo una clase diferente que construí sobre Griffey, pero hoy en día, en mi trabajo de día, usé Java y groovy para construir servicios back-end para sitios web y aplicaciones de tamaño mediano . Y actualmente estoy trabajando con el Internet de las cosas tipo de arquitecturas. Um, así que sigo muy profundamente en usar Java para mi trabajo diario. Y en los primeros dos miles, diseñé y enseñé una edición Java two enterprise, que eso ya no existe. Pero eso fue una especie de trabajo es respuesta a la programación del lado del servidor y las aplicaciones en línea en el día, esa fue una experiencia muy interesante y desafiante. De acuerdo, hablemos de este curso. lo que el curso se divide en tres partes en la primera parte. La primera mitad de la primera parte es una especie de, ah, sólo una introducción básica a Java así. Sintaxis la arquitectura, preguntas como tú sabes qué es una máquina virtual Java. ¿ Cómo funciona eso en la introducción a los entornos de desarrollo que las personas utilizan en entornos profesionales? Y luego la segunda mitad de la clase, vamos a meternos en la orientación de objetos. Por lo que Java es, en su núcleo un lenguaje orientado a objetos. Y así si realmente no tienes una comprensión profunda de estos conceptos como objetos, clases, interfaces de polimorfismo, herencia cosas así, uh, es difícil trabajar con, ¿verdad? Entonces eso es lo primero de lo que vamos a hablar en la primera parte. Entonces en la segunda parte pasará a más de la mecánica de Java, por lo que eso se divide en dos áreas generales. Hay características del lenguaje, cosas que son partes centrales del lenguaje pero realmente se trata de la orientación de objetos. Por lo que no subieron en la primera parte. Pero sabes algo. Algunos ejemplos escribieron su excepción de paquetes, cosas estáticas como esa que definitivamente son clave para entender. Pero no es realmente orientado a objetos, um, conocimiento. Y luego en la segunda mitad de la segunda parte hablaría de las bibliotecas centrales por lo que Java se envía con decenas de miles de clases que implementan todo tipo de tareas de programación rutinarias para ti colecciones citas bibliotecas de tiempo entrada, salida, enhebrado. Pasaremos y probaremos tocar el dedo del pie en algunas de las más importantes y te daremos una visión general de algunas de las menos importantes. Entonces estás consciente de que esas cosas existen. Y luego en la tercera parte, pasamos a algunas de las cosas que se han introducido en los últimos quizá cinco años de Java, Um, que he llamado sus trabajos modernos. Entonces cosas como los genéricos, aunque aunque los genéricos son un poco más antiguos que eso, pero la función Lambda remite anotaciones, el sistema de módulos, el estilo funcional de la programación. Todo esto es algo nuevo para Java y, uh, pero realmente, pero realmente, poderoso java de hoy que se ve utilizado todas estas cosas muy fuertemente. Por lo que es muy importante entender todos esos conceptos, y de eso se trata la tercera parte por lo que los prerrequisitos para esta clase. Entonces, antes que nada, creo que probablemente deberías tener alguna experiencia en programación antes de empezar esto. No vamos a empezar con esta idea de como, ¿qué es una variable? ¿ Qué es una función? ¿ Qué significa ejecutar un programa como si no puedes calificar, Digamos, 500 líneas de código en algún otro lenguaje de programación o incluso en Java. Entonces probablemente necesites ir a hacer un poco de estudiar antes de empezar a tomar este curso, porque no partimos de ese nivel básico. Si tienes algo de experiencia laboral, creo que está bien. Si tienes algo, um, um, ya sabes, experiencia laboral incompleta Número uno. Siempre es agradable tener una revisión de cosas que has visto antes. Pero el número dos, ya sabes, si todos los temas de esa diapositiva anterior o no familiar lo sabes, definitivamente vas a aprender algunas cosas nuevas aquí. Segundo es que esto no es una frívola no es como una clase de 45 minutos, ¿ verdad? Entonces hay una tonelada de información. El trabajo es un ecosistema enorme, enorme. Tiene pero 25 años. Creo que ahora, al momento de este escrito, quizá más. Entonces hay un montón de cosas que aprender. Aun así, no vamos a cubrir todo, y habrá partes, sobre todo importar tres palabras. Empieza a ponerse bastante difícil. Entonces, uh, realmente estamos buscando gente que sea seria acerca de aprender a ser fluidos en Java . Está bien, si eso todo te suena bien de lo que me suena bien. Entonces empecemos en la primera sección de la primera parte 2. 01 descripción: De acuerdo, bienvenido al Capítulo uno de la Primera Parte de la clase laboral profesional que trata de objetos y orientación a objetos. Por lo que sólo para recordarte dónde estás en la secuencia es la parte uno del curso de tres partes en esta parte. Vamos a tomar la primera parte del curso y hablar de arquitectura básica de trabajo y sintaxis y algunos entornos de desarrollo que se utilizan en entornos profesionales . Y luego pasaremos al núcleo orientado a objetos de Jabba. Hablar de objetos en clases y polimorfismo y temas como ese. Entonces el objeto está aquí. Número uno. Queremos asegurarnos de que obtienes una amplia introducción al ecosistema Java. Es complicado, y la gente arroja palabras, y a veces no usan las palabras exactamente correctamente. Por lo que es agradable tener realmente visión general de Hubble. Las piezas encajan en Java. Después pasaremos la mayor parte del resto de la clase aprendiendo sobre empleos objeto durante la base . Por lo que Java fue creado como un lenguaje orientado a objetos que es el núcleo del lenguaje, y realmente hay que entender eso para sacarle el máximo provecho, y en el camino aprenderemos un poco sobre el diseño orientado a objetos. Ahora lo que eso significa es, ¿ Cómo se escribe buenos programas en un lenguaje orientado a objetos que se llama objeto durante un diseño? Y aunque ese no es realmente nuestro enfoque, hablaremos un poco de eso a medida que vayamos en cuanto a cómo avanzas en tu proceso de pensamiento de diseñar un programa cuando estás usando un objeto durante ese lenguaje. De acuerdo, el esquema real de esta parte volvería a estar en el principio. El trabajo básico de arquitectura poniéndose e instalado. Introducción a algunos entornos de desarrollo construirá un programa hola mundo. Puedes obtener tu primer bit de código en ejecución. Bueno, entonces solo haz un poco de revisiones de sintaxis. Entonces entiendes bien cómo se ven los constructos básicos en el trabajo. Si esta es tu primera vez y luego saltaremos a hablar de orientación a objetos como clases de agua. ¿ Cuáles son los objetos? Elevar y cobranzas? Ah, polimorfismo con interfaces y herencia y ese será el grueso de la de esta parte del proyecto del curso. De acuerdo, Una de las cosas interesantes en las que te meterás aquí es el proyecto de clase. Por lo que nuestro proyecto de clase va a ser una simulación de juegos de mesa en particular, Um, el juego de Disculpa. Entonces si alguna vez has jugado lo siento antes, uh, tienes un poco de ventaja en los requisitos aquí. Supongo que lo interesante de esto es el número uno. Lo construimos desde cero. Por lo que empezamos con un proyecto vacío y escribimos todo el código 100% por nosotros mismos. Uh, igual que lo harías en una vida real, ¿verdad? Y el proyecto se construye sobre sí mismo de capítulo a capítulo. Entonces empezamos cuando empezamos a hacer objetos, empezamos a construir el objeto, las clases para este juego, y seguimos agregando cada vez más funcionalidad. Entonces no es uno de esos llenan los proyectos en blanco donde te entregan 200 líneas de código y tienes que ir en una NCAA significaba forrado 73. Y entonces se supone que ese es tu proyecto. Esta es en realidad una en la que realmente estarás recubriendo de verdad, correcto, y por supuesto, soluciones de aire proporcionadas después de cada capítulo del video. Haré la solución junto contigo para que veas cómo lo hago ahora. Tipo de hablarte a través de ella para que puedas entender cómo pienso al respecto. Y luego, por supuesto, que este código fuente estará en el área de proyectos de su curso. Por lo que siempre puedes mirar eso. De acuerdo, entonces en el siguiente capítulo vamos a entrar en la historia de Java y una rápida introducción al ecosistema en general y vamos a conseguir el trabajo de máquina virtual instalada en tu computadora para que podamos empezar a escribir algún código. Te veré ahí. 3. 02 introducción a Java: De acuerdo, bienvenido de nuevo al Capítulo dos. Interesados. Trabajo Los fundamentos. Entonces en este capítulo solo cubriremos algunas cosas de muy alto nivel antes de meternos en la carne de la clase. Uno es una especie de la historia de Java y los diferentes lanzamientos. Porque se oye bastante de eso. Ah, rápido resumen de nivel superior de cómo funciona Java y cómo se compila y cosas así, y un vistazo rápido a las herramientas que utilizamos para corregir y compilar y trabajar con Java. Entonces en términos de historia. Así que Sun Microsystems fue la empresa que desarrolló Java a principios de los años 19 noventa, y en ese momento el set de funciones era realmente increíble era una plataforma cruzada, uh, uh, lenguaje de programación, orientado a objetos, basura multi roscada recolectada sobre y sobre y sobre. Este fue un gran trato. Uh, hoy , por supuesto, en el siglo XXI, todo esto es parte del curso. Pero en aquel entonces, esto era un cambiador de juego realmente ah, real. Ahora, Sun Microsystems fue comprado por Oracle en 2010 y desde entonces Oracle ha pastor el desarrollo de Java. Ha habido un montón de lanzamientos de Java, y algunos de ellos están aquí con el número lanzado, la fecha y sólo un puñado. Las principales características. Hay tres cosas que ver en este ligero número Uno es que vamos a estar usando java. 11 como Wiese es nosotros allá abajo en el fondo. Entonces esa es la versión de Java con la que se trata este curso. Número dos. Sólo algo a notar históricamente es que hubo dos grandes lanzamientos de Java que realmente fueron cambiadores de juego, y ese fue trabajo de cinco y trabajo ocho. Por eso esos airbold ID Así que esos dos lanzamientos realmente hicieron por diversas razones. Mayo Java desarrollo bastante diferente. Definitivamente hay un antes y después de cada uno de esos lanzamientos. Ahora lo tercero a notar es un poco más sutil. Aquí es que en los primeros días de Java, el lanzamiento es más o menos llegó cada dos años aproximadamente, y eso fue bastante bueno. Java siguió actualizando y obteniendo nuevas capacidades, pero note hacia el final. ¿ Qué pasó? Java siete tomó cinco años de trabajo y nueve tardaron cuatro años, y la comunidad comenzó a expresar mucha frustración de que parecía que Java no podía empujar nuevas características de manera oportuna, y así que eso llevó a Oracle a cambiar el camino ese trabajo se libera. Por lo que Java nine fue el último lanzamiento importante en la forma en que los lanzamientos principales de Java anteriores fueron mayores. Ahora lo que hacen, hay lanzamientos dos veces al año. Entonces después del trabajo un nueve seis meses después llegó Java, 10 después de Java. 10 6 meses después llegó Java 11 y alguien en apoyo así sucesivamente. trabajo 11 cuenta con apoyo a largo plazo. Entonces eso significa, como errores de seguridad, aire encontrado y, uh, otras actualizaciones son necesarias para soportar nuevas plataformas de hardware o cosas por el estilo. Trabajo 11 seguirá llamando la atención para los próximos tres años, Dicen otros lanzamientos, como Java 12 1 mes después de que salga Java 13, se termina el apoyo para Job 12, lo que eso tiene a algunas personas un poco nerviosas. pequeños Los lanzamientos máspequeñosy frecuentes son más fáciles de actualizar, pero como que tienes un arma en la cabeza porque solo hay un mes que tienes antes tu Java deje de ser compatible. No quiere decir que deje de funcionar, pero aún así, en un ambiente profesional que da un poco de miedo. Por lo que muchas empresas de aire saltando a este mercado necesitan ahora mismo y lo que deja dos lleva a la pregunta de qué es Java ya. Antes era el trabajo de que venía de Oracle era Java. Ahora es mucho más complicado. Entonces ahora hay un proyecto de código abierto llamado Open J. D. K. Esa es la compilación de referencia oficial de Java. Sea lo que sea abierto que haga J. D. D. K, eso es lo que hace Java. Todos los demás están equivocados. Esto se desarrolla, liderado por Oracle, supuesto, pero hay muchas otras grandes empresas involucradas. Red Hat, IBM Azul y una letanía de otros que están todos contribuyen a este código abierto. J T K Project Oracle luego toma el proyecto abierto J. D K y agrega muchas más características empresariales que agrega muchas más utilidades independientes que agrega algunos módulos al trabajo de distribución que tienen ah más enfocados a la empresa características. Y también hay muchas otras empresas que toman el lanzamiento abierto del kit J D y apoyaron a su manera. Y esto es muy similar a la forma en que tienes distribuciones de Lennox. Para que puedas conseguir a Susie Lennix o Debian Lennox o todo buon a las clínicas, y todas son Lennox, pero todas son algo diferentes y tienen un poco un poco diferentes paquetes de características. Um, algunos les gusta el que estamos usando, que es el Azul Zulu Jabba la versión comunitaria. Ofrecen diferentes horarios de apoyo. Entonces lo que está diciendo Azul es, Vale, quieres usar Java 13. Eso es genial. Vamos a apoyarlo por otros dos años una vez que Oracle o una vez que los proyectos Open J DK dejen de apoyarlo. Entonces hay mucha Ah, confusión en el momento en que grabo esto, que es temprano, 2020. Creo que el mercado se sacudirá y surgirán algunos contendientes fuertes. Pero por el momento estamos en un Estamos en un periodo de cambio aquí. Muy bien, pasemos a los aspectos técnicos de Java. Um, Java es un lenguaje compilado. Cuál tomarías tus archivos fuente y ejecutarías un compilador para convertirlo en archivos binarios , y luego esas faltas binarias o lo que realmente se ejecutan. Entonces en Java, nombramos nuestro código fuente. Lo ponemos en archivos llamados dot Java, y el código fuente está, por supuesto, debasado en impuestos. Lo escribes en tu teclado, ejecutas un compilador. El nombre de ese programa compilador es Java Sea, que significa compilador Java, y lo que sale del otro lado es un archivo de clase, que tendrá el mismo nombre que su archivo fuente. Pero en lugar de dot Java, será clase de punto y los archivos de clase air binario y la estructura del del archivo de clase se especifica por las especificaciones del trabajo. Ahora los archivos de clase no se ejecutan directamente herbal en ningún hardware. No puedes simplemente tomar un archivo de clase, empezar a ejecutarlo en tu cuadro de Lennox, por ejemplo. En cambio, hay otro programa ahí dentro, que se llama la Máquina Virtual Java. Por lo que la máquina virtual Java está en. Ejecuta un ble que se ejecute en tu computadora en tu laptop o en tu servidor o lo que sea que estés corriendo tú mismo. Estamos en carreras como cualquier otro ejecutar herbal. Pero lo que el trabajo de Virtual Machine sabe hacer es ejecutar archivos de clase. También escucharás a la gente hablar de archivos de clase como código de byte por lo que, el JBM sabe, tenía archivos de clase ejecutados, y eso en realidad ejecutará tu programa. Entonces si miras hacia abajo Hay dos pasos para ejecutar un programa Java. Tomas tu archivo de código fuente hola dot java y ejecutas Java Sea en él. Eso dará salida clase hello dot y luego cuando quieras ejecutar que digas trabajo un hola y que inicia un jbm y ejecuta la clase hola. Ahora nota la asimetría aquí, como cuando dices cuando ejecutas el JBM, no necesitas decir hola clase dot las clases asumidas, pero cuando compilas, tienes que decir dot Java ahora generalmente, eso no te va a importar, pero es un poco agradable saberlo. Entonces cuando la gente habla de Java, hay un billón de acrónimos y diferentes formas en que hablan de ello. Eso puede ser confuso. Por lo que el J R E significa el motor de tiempo de ejecución de Java, que básicamente es el JBM, la máquina virtual Java que proporciona la capacidad de ejecutar programas Java. Entonces la gente hablará del J. D. K el trabajo, un kit de desarrollo que es el jerry más las herramientas para desarrollar y compilar programas Java. Entonces, por ejemplo, Java Sea estaría incluido en el J T. K, pero no el J R E. Y luego hay un SDK de trabajo, que parece ser lo mismo que el J. D. K pero también podría incluir documentación o algo así. Estos términos no están muy definidos. Es importante saberlo, porque si vas a una página web, entonces descargas Java y dice Donald Jr E. Te das cuenta de que no vas a poder compilar ningún podio con eso, porque no va a tener el trabajo un C compilador. Pero si dice broma, descarga a J. T. K, entonces esperas tener prácticamente todo lo que necesitas para desarrollar Java. Entonces se convierte entonces en una pregunta. Entonces, ¿qué es el trabajo? Pero hay todas estas partes diferentes, así que la gente habla del ecosistema Java, que es el lenguaje de programación. Esas son básicamente las reglas de sintaxis de ¿Cómo escribirías código Java? Después están todo el trabajo de las bibliotecas que despachan al descargar cualquier trabajo, una distribución. Hay decenas de miles de archivos de biblioteca que la gente ha escrito a lo largo de los años para proporcionar funciones como, ya sabes, archivar y poner una salida y multi threading y un montón de cosas diferentes como esa. Después hay una máquina virtual Java, que ejecuta el código en tu plataforma de elección y luego también con Java. Hay un montón de herramientas de línea de comandos, no solo Java y Java Sea, sino que también tienen un montón de herramientas de depuración y compilación inversa y herramientas de empaquetado y todo tipo de cosas que el trabajo que una distribución ha acumulado sobre los años. Ahora, justo como me di cuenta, la JV M es considerada por la mayoría de la gente la joya de la corona de este ecosistema. Es que es muy sofisticado. Es una especie de, ya sabes, algo de la vanguardia de la informática, y corre más lenguajes que trabajo. Esto es algo que en realidad es realmente interesante. Hay muchos lenguajes que se ejecutan en el jbm, no solo en Java. Um, algunos de los principales son groovy. Cierra tu Scala, Escocia. Son decenas y decenas más de esos cuatro de los mayores que tienen mucha tracción. Pero es muy interesante porque estos lenguajes proporcionan características avanzadas o simplemente diferentes formas de acercarse a la programación que Java en sí no lo hace. Pero generalmente interoperan realmente, muy bien con Java porque se están ejecutando en la misma máquina virtual, por lo que eso está un poco más allá del alcance de esta clase. Pero es interesante saberlo. Ahora todo esto parece realmente complicado y probablemente te estés rascando la cabeza. Pero no te preocupes. Ahí hay yo de ese, que son entornos de desarrollo integrados que te permiten desarrollar y compilar y empaquetar tu código dentro de entornos basados en gooey como el que ves en el lado derecho . Aquí está Eclipse y estaremos usando un I. D en esta clase porque así es como todos codifican trabajo de estos días. Y realmente va a, uh, abstraer muchos de estos problemas para ti. Hazlo fácil, y ellos solo se encargarán de muchas de las cosas de las que hablamos, para que realmente no tengas que preocuparte tanto por ello. No obstante, si vas a empezar a trabajar en Java, te encontrarás con un montón de esos temas. Entonces es bueno saber que todas esas cosas existen. Muy bien, tu ejercicio para este capítulo va a ser para que Job 11 se instale en tu computadora. Muy bien, ahora de nuevo, estoy usando la edición comunitaria Zulu Zulu del trabajo 11. Um, y sin duda eres bienvenido a usar que puedes usar casi cualquier trabajo. 11. No creo que no debamos estar tocando ninguna característica que no esté en el núcleo. Trabajo 11. No te voy a dar aquí ni en el producto Sección Segundo proyecto. Alguna instrucción sobre cómo instalar Java? Porque sí tipo de cambio de vez en cuando y lo diferente dependiendo de la distribución que utilices. Podrán tener un tipo diferente de er instalado, así que solo sigue sus instrucciones. Asegúrate de obtener el J. D. K, no el J. R. E. Si ofrecen dos diferentes y cuando esté hecho, deberías poder abrir el símbolo del sistema como ves en el pelo de diapositiva y dices versión de tablero de Java y debería salir y deberías ver un montón de Elevens There, Aquí mismo vemos abierta versión de J. D. D. K 11 punto cerado hasta cinco. Entonces eso nos dice que este es el trabajo 11. Um, 15 de octubre 2019 Versión de soporte a largo plazo. De acuerdo, entonces este es el trabajo oficial. A build job 11 facturado a partir del 15 de octubre de 2019 por lo que deberías poder hacer eso. Deberías poder abrir la versión de la línea de comandos, digamos la versión de Java dash y obtener algún tipo de salida como esta. Si estás usando Zulu, debería parecerse más o menos a esto. Puede que haya algunas actualizaciones desde el momento en que he escrito, ya sabes, hecho este curso, pero en todo caso, esa es tu tarea para esta sección. Y una vez que lo hagas, te encuentres en el siguiente capítulo y hablaremos de cómo instalar un I.D. I.D. E. Y entonces tendremos todas nuestras herramientas listas para sumergirnos en los desempleos reales en Texas. Hablar con usted entonces. 4. 03 JavaIDes: Está bien. Bienvenidos a todos al Capítulo tres Java I ds. Preparémonos para empezar a golpear algún código. Muy bien, entonces este capítulo es uno corto sólo para aprender, instalar un I D. E y ponernos en la posición del dedo del pie, Empieza a escribir algún código. Ahora, podrías estar diciendo una idea. ¿ Qué? Está bien. I d e es sinónimo de desarrollo integrado en But environment, que es un editor de combinación, Compiler de bugger Runner, Todo lo que necesitas para desarrollar código Y solo señalo que estas cosas son locas, poderosas. Cuando compilas un lenguaje de programación, el compilador crea una estructura de datos llamada Árbol de sintaxis abstracto que le dice al compilador que sabes lo que significa tu código y lo que hace. Estos I d Ys están enchufados a los abstractos de A S t en textura. Y así llevan cosas en la edición y re factorizando tu código que un editor de texto simplemente no sería capaz de saber. Es decir, hacen algunas cosas muy sofisticadas. No obstante, si eres como un gurú nemax o algo así, y crees que puedes ser mucho más productivo con eso que siéntete libre. No obstante, para la mayoría de nosotros usar un 90 e va a ser la forma en que estemos pasando nuestros días como codificador profesional. Entonces, ¿cuáles son los populares I Ds? Bueno, partir del momento de este curso, los principales Aaron, le dicen a Ajay de una empresa llamada Jetbrains, y esa parece ser la que tiene la mayor cuota de mentalidad en este momento. Después está Eclipse, que creo es el I D E original para Java. Se remonta al menos al año 2000 si no antes de eso. Y luego hay frijoles netos, que creo que fue iniciado por Sun Microsystems. Ahora está patrocinado por Oracle que parece ser menos popular que inteligente o eclipse en esta clase. Voy a estar usando clips cuando lo hagamos cuando hagamos nuestro trabajo de proyecto, y revisé las soluciones con ustedes. Estaré trabajando en eclipse, pero realmente no importa. Todos hacen casi lo mismo. La clase y los proyectos no dependen de tu elección de I d. E. No vamos a hacer mucho aprendizaje a usar las ideas. Te mostraré algunas cosas en un video comandos de eclipse básicos solo para que empieces. Um, Lo importante es solo escoger uno, descargarlo de nuevo, instalarlo de acuerdo a sus instrucciones. Va a ser diferente para cada uno, y las instrucciones sí cambian de vez en cuando. Pero solo recuerda que desarrollar y trabajar tanto más fácil si tienes una buena idea y te pones realmente bueno en usarlo. Entonces esa definitivamente es una inversión que vale la pena si buscas convertirte en un trabajo, un programador y eso es todo. Por lo que el ejercicio para este capítulo es instalar uno de los populares I DS y ponerlo en marcha. Por lo que de nuevo, busque en su sitio web las instrucciones de instalación. Algunos de ellos ofrecerán múltiples adiciones, y algunas de las adiciones se pagarán otras. Van a tener todo tipo de funcionalidad extra para el propósito de esta clase. Solo necesitas la edición básica de desarrollador Java, como sea que se llame en el I D. Que elijas. Uh, eso debería ser gratis. Debería poder instalar eso más adelante. Cuando comienzas a hacer cosas más sofisticadas, puedes pensar en tal vez pasar a una versión de pago, pero eso no es necesario para esta clase. Y luego una vez que tengamos eso instalado y está funcionando. Entonces en el siguiente capítulo, vamos a empezar a programar. Muy bien, ya veremos eso. 5. 04 JavaHelloWorld: Muy bien, Bienvenido al Capítulo cuatro, Java, Hola mundo, donde vamos a escribir nuestro primer código de ejecución. Entonces en esta clase, sólo vamos a aprender sobre el formato de trabajo de los archivos de código fuente y cómo iniciar la ejecución de un programa Java utilizando lo que se conoce como el método principal. Por lo que el código fuente Java se pone en archivos que la gente tiende a llamar a archivos de clase porque contienen clases Eso es diferente a los archivos de clase de los que hablamos antes, que son los archivos binarios producidos por el compilador. Entonces la nomenclatura es un poco, um, um, confusa a veces. Pero digamos que querías crear una clase llamada mi clase. Escribirías un archivo llamado mi clase dot Java, Y luego dentro de ese archivo, tendrías este encantamiento aquí, clase pública, mi clase seguida de llaves. Entonces, ¿qué está pasando aquí? El primero de todo el nombre de clase que definas el código fuente de ira debe ser el mismo el nombre del archivo antes del trabajo de punto. Entonces si es clase pública, mi clase, tiene que ser mi clase, no trabajo. Y luego las llaves denotan el alcance de la clase Entonces, um, um, qué alcance Significa es básicamente solo un grupo de declaraciones que pertenecen juntas. Si haces alguna programación de python, sabrás que el alcance se denota por el nivel de sangría. Si sangró su código debajo, digamos, como una declaración if, que denota un bloque de código que va juntos en Java. En cualquier lenguaje que descienda del lenguaje de programación C, utilizamos llaves para denotar alcance. Muy bien, los programas Java comienzan a ejecutarse en un método llamado método principal y método principal. Se ve así. Esto es estándar, ah, formato. Ford es el vacío público estático principal corchete argumentos de corchete. El corchete significa array, y hablaremos de eso en unos capítulos. Annette's donde, cuando invoques esta clase desde la línea de comandos, aquí es donde comenzará la ejecución. El ARDS se refiere a los parámetros o argumentos que haya pasado en la línea de comandos. Entonces así es como pasarías en los argumentos de la línea de comandos al programa que están disponibles izados como el argumento org Now, mayor parte en su vida de programación Java, no le hace bien muchos métodos principales, y incluso si lo haces tan bien ve el yo d e los va a crear para ti, así que realmente no tienes que preocuparte demasiado por toda esta sintaxis. Pero vale la pena señalar que esto es algo que la gente se ha tirado a Java en los últimos cuatro. Entonces solo para que algún programa se ejecute, hay mucha sintaxis ahí. ¿ Qué es una clase? ¿ Qué es público? Yo. ¿ Quieres una estática? ¿ Yo? ¿ De qué se trata el vacío? ¿ Qué hacen los corchetes? Ahí hay un montón de cosas que requieren explicación. Uh, vamos a pasar por todas esas cosas a medida que pasamos por la clase. Por ahora, solo puedes tomar el método principal como especie de, ah dado formato que siempre usas. De acuerdo, entonces tenemos algún código ejecutándose, pero no hizo nada. Entonces hagámoslo. Lo más sencillo que hace todo el mundo es imprimir hola Mundo al Consejo. Entonces de nuevo, en Java, como conseguir algo para imprimir en la consola es un poco verboso, su sistema dot out dot print Lynn y luego la cadena que quieres imprimir para estándar . Entonces solo para tu sistema de referencia es una clase que está en Java. Out es el flujo de salida como se le llama, que es una variable estática en la clase del sistema y luego imprimir línea es el método que dice Prince Align, imprimir este código y luego dar seguimiento con el carácter de pies de línea Gire de nuevo. No necesitas preocuparte realmente por eso. Es lo mismo todo el sistema de tiempo fuera. El Kremlin acaba de tratar como una cosa larga que tipeas. No te preocupes demasiado por los componentes. Ahora, si fueras a ejecutar nuestro pequeño programa que acabamos de escribir en la línea de comandos, lo haces así, ejecutarías Java Sea sobre mi trabajo de punto de clase A para producir mi clase, esa clase, que es la archivo de clase real real. Y luego ejecutarías ese archivo de clase en el jbm diciendo trabajo de mi clase y eso ejecutaría el programa empezando por el método principal. Y lo que verías es hola, impresión mundial al consejo. Ahora vamos a usar el I D. Así que voy a cambiar para cambiar a Eclipse para mostrarte cómo funciona en eclipse, y te guiaré por este primer programa por si acaso eres totalmente nuevo en él. las otras ideas serán muy similares. Los atajos de teclado y los menús. Van a ser ligeramente diferentes, pero todo funciona casi igual. De acuerdo, si esta es la primera vez que instalas Eclipse o lo abres en tu espacio de trabajo aquí obtendrás esta pantalla de panel de bienvenida, que tiene enlaces a un montón de tutoriales y cosas por el estilo. No quiero ver esto, y no quiero volver a verlo, Así que voy a ir directamente a lo que llaman el banco de trabajo. De acuerdo, entonces esta es la vista donde vas a estar trabajando. A mí me gustaría tener un poco más de bienes inmuebles. Voy a cerrar algunas de estas ventanas que no voy a necesitar, y estamos listos para escribir algún código, pero hay que saber que no se puede simplemente generalmente en estas i d. E. S empezar a escribir archivos individuales. Tienes que ponerlos en un proyecto. Y un proyecto realmente es solo una carpeta en tu laptop. Entonces vamos a crear un nuevo aquí. Tenemos un enlace creando nuevo trabajo un proyecto. Hagámoslo. Lo llamaremos Hola mundo. Ups. Ese es el espacio fuera de ella. Del mundo utilizó J a Java. 11. Crear carpetas separadas para el abastecimiento de archivos de clase. Tienes esta opción de que los archivos de clase podrían entrar en la misma carpeta que los archivos de origen . Si haces clic en esto, creo que todos los ponen en archivos separados, carpetas separadas. Y luego en esta página en Eclipse, hay una cosa que me gusta que noten. Crear el módulo info dot archivo Java. No hagamos eso, vale, eso solo causa eso. Eso es parte de algo de lo que hablaremos más adelante en el curso llamado sistema de módulos Java nueve Solo causa mucha complicación extra no nos ayuda en absoluto ahora mismo, Así que vamos a deshacernos de eso y luego creamos el proyecto. Ahora. Cuando abrí el proyecto de que hay una carpeta aquí llamada SRC, es donde va tu fuente y vamos a crear una hola clase World Java. Ahora. ¿ Cómo podría uno hacer eso? Bueno, la forma en que lo haces en Eclipse, eso es justo. Da click en la carpeta fuente y dices nuevo y dice clase. De acuerdo, hagámoslo en la clase y llamaré a esta clase. Hola mundo. Está bien nombrar a la clase lo mismo que el aviso del proyecto que eclipsa diciendo: Oye , , estás poniendo esto en el paquete predeterminado. Eso es desalentado. Todavía no hemos hablado de paquetes. Eso haremos mucho más tarde en la clase, y luego te diremos cómo arreglar esa advertencia. Ahora, nota Aquí hay todo tipo de cosas. Puedes hacer clic en la mayor parte No importa. Excepto ahora mismo dice: ¿Te gustaría que pisara el vacío estático público? Principales métodos? Sí, seguro. ¿ Por qué no escribes eso para mí, entonces? No tengo que hacerlo. Y aquí viene Vale, así que, uh, conseguimos esto. Y en lo personal, me gustan los tirantes rizados en las otras líneas. Yo voy a hacer eso. Ahí está esta Ah, para hacer declaración puesta aquí para ti. Para que no te olvides de volver y arreglar esto. Pero lo que queríamos hacer era justo lo que teníamos en nuestro sistema de diapositivas. Salió ese terreno de impresión pone nota cómo, uh, el editor sabe qué? Um, las funciones están disponibles. Entonces otra vez, algo que un editor de texto no te ayudaría con Risk fue decir hola mundo con un exclamación. ¿ Te acuerdas? Todo termina con semi colon. Guarda ese archivo. Y ahí tienes. Ahí está tu primer programa de trabajo. Ahora. ¿ Cómo lo ejecutas en Eclipse? Se puede volver a este panel de la izquierda de la forma en que generalmente lo hago bien, clic en él y decir, Ejecutar como solicitud de empleo. A veces hay múltiples formas de que Eclipse interprete un archivo dado, dependiendo de lo complicado que sea tu código. Ahora mismo. Sólo hay una forma que tiene una solicitud de empleo. Tú lo ejecutas y sale el cónsul y aquí es donde va tu salida. Hola, mundo, ¿verdad? Y si quieres demostrar que puedes cambiar un poco el texto, puedes volver a ejecutarlo y puedes ver que cambió. Entonces realmente es nuestro código fuente el que se está ejecutando aquí. De acuerdo, entonces esa es una introducción a Eclipse. Eso debería ser casi suficiente para que pases por las primeras fases de pareja de nuestro proyecto. realidad no hay mucho más que eso. Obviamente, si exploras los menús y las cosas y eclipsas todos los menús pop up en los menús de primera línea , hay un montón de cosas que puedes hacer aquí, la mayoría de las cuales realmente no necesitamos preocuparnos. Para nuestra clase. Muy bien, vuelta a los toboganes. Entonces lo que los ejercicios para este capítulo en particular es hacer justo lo que hice. Consigue tu primer programa hola mundo en ejecución. Así que consigue tu i d open crea un pequeño proyecto hola mundo y solo consigue el, um, um, consigue la cosa funcionando en imprenta al consejo en el área de proyectos. Hay instrucciones para ello. Se etiquetará 04 Hola mundo, que es lo mismo que el nombre del capítulo. Para que puedas rastrearlos juntos. Entonces si quieres un poco más profundo, um, explicaciones sobre qué hacer Echa un vistazo a ese expediente. Así que adelante y haz eso de vez en cuando en el siguiente. Uh, bueno, sólo para resumir de lo que hablamos. Recuerda, los programas Java comienzan su ejecución en el método principal. El código está contenido en el archivo de clase en el archivo de clase tiene un método principal y, uh, los parámetros que pasaste al sistema de funciones que fuera que imprimen Lynn luego se imprimen al cónsul. De acuerdo, vamos a usar esos fax bastante en el resto de la clase. Entonces una vez que tengas eso funcionando en tu I d Entonces estamos listos para el siguiente capítulo, que será todo sobre clases y objetos. Entonces aquí es donde realmente vamos a meternos en ello. Muy bien, ya veremos. 6. 05 BasicSyntax: Muy bien, bienvenido al Capítulo cinco. Desempleado en Texas. En este capítulo, sólo vamos a repasar parte de la sintaxis básica de Java. No voy a ser Laborista. Este ah mucho es bastante autoexplicativo, pero es importante al menos verlo una vez antes de empezar a trabajar en Java. Si has programado algún trabajo de antes, probablemente te aburras por esto. Pero es bueno para todos Teoh ver todas las diferentes construcciones sintácticas que van a venir, incluyendo estas cosas Convenciones de nomenclatura, tipos, variables, declaraciones, bloques condicionales es de cuatro saltos todo este tipo de bloques básicos de construcción del lenguaje de programación. De acuerdo, trabajo A sí tiene sus propias convenciones de ortografía. Estos no fueron forzados por el compilador, pero todos lo hacen de esta manera, y la gente estará infeliz si escribes las cosas de manera diferente. Entonces en Java usamos lo que se llama caso Camel, que significa que las palabras están encortadas y las palabras nuevas tienen la primera letra en mayúscula . Por lo que tiene jorobas como ven aquí en este caso de camello versus otros casos. Por ejemplo, caso Snake. Es así como a Python le gusta hacer donde pones subrayados entre las palabras y las dejas todas. En minúsculas eso Casos Campbell La forma estándar de hacer las cosas en los nombres de clases Java generalmente siempre se capitalizan en mayúsculas. Constantes aire hicieron todos los gorros de la forma en que lo ves aquí en concepto constante porque son todos gorras. Ellos sí usan el guión bajo para separar las palabras, pero casi todo lo demás comienza menor mayúsculas y minúsculas y usa caso camel Si hay múltiples palabras en el nombre que serían variables y nombres de métodos y nombres de paquetes y cualquier otra cosa te puedes imaginar, Vale, Una cosa que es interesante de Java desde el punto de vista de un lenguaje orientado a objetos es que tiene algunos tipos en que no son objetos. Son lo que llamamos primitivos, y estos son los que ven aquí. No voy a leer este gráfico. Lo tienes como referencia. Pero estos aire no objetos en el sentido de que la mayoría de las clases de Java son. Pero estos tipos de aire que puedes usar que son simplemente numéricos y de carácter y tipos de bullying y mordida, bien, declarando variables. Por lo que el trabajo es uno de esos lenguajes donde necesitas declarar la variable antes de usarla. Tienes que decirle al compilador que voy a usar esta parábola llamada I y Es un Int, que es un imager primitivo, ¿ verdad? Se puede declarar una variable así y luego asignarle valores más adelante. O puedes hacerlo como ves con la línea de abajo con pastel, donde declaras la variable e inicializarla en la misma sentencia. Ambos de esos aire fino moviéndose al fondo. Ahí vemos que las declaraciones y java siempre se terminan por punto y coma, ¿ verdad? Hay muchos lenguajes de programación donde el compilador infiere el final de la línea por el retorno de carro al final del final de la línea, pero nada trabajo. Es sólo el semi colon el que denota el final de línea y los espacios en blanco. Comentarios ignorados. Si pones una doble barras en una línea de código, el compilador entonces considera todo, desde la doble barras hasta el final de la línea como un comentario. Por lo que condonas puedes escribir algún código y luego poner una doble barras. Después de eso, solo puedes iniciar una línea con una doble barras que la haga convertir en un comentario. Si necesitas comentarios de múltiples líneas, haces una estrella de barra y luego todo a partir de entonces es un comentario hasta que haces la barra de estrellas Vale, las cuerdas en cualquier lenguaje de programación son un verdadero caballo de batalla, y hay algunos especiales sintaxis para cadenas en Java, que probablemente estaría completamente por debajo. Se esperan completamente aceptados, más bien en la primera línea. Ahí ves con mi clase si estás creando una instancia de una clase, y realmente no hemos hablado de lo que eso significa todavía, pero normalmente hay que usar algo llamado el nuevo operador para crear una instancia de una clase para cadenas. No necesitas hacer eso. Casi nunca ves a nadie hacer cuerda nueva. Lo que puedes hacer es simplemente poner tu cadena entre comillas dobles, y el compilador creará automáticamente un objeto de cadena para ti porque las cadenas también son objetos, y luego lo asignará a la variable al mensaje. Entonces eso es una especie de ah, cadena especial, sintaxis literal. Otras cosas geniales que puedes hacer con las cuerdas en la parte inferior derecha es que puedes contaminarlas con el signo más. Entonces ven que este mensaje equivale a dos palabras más, y luego cuando hacemos nuestro sistema fuera del Kremlin, podemos incluso Capitán ocho. A *** con la cuerda, como se ve ahí en el mensaje, más yo, y como muestra el grito out, imprimirá dos palabras colon a Así que todos esos estarán contaminados. El entero me convertiré en su representación de cadena cuando intentes imprimirlo, y así todo eso es muy conveniente. Condición correcta. ALS. Por lo que Java utiliza el mismo pecado impuestos C o C más cualquier lenguaje C. Uh, lenguaje de programación C, familia de lenguajes. Y si la expresión booleana dentro de los paréntesis se evalúa como verdadera, entonces el bloque que sigue a eso, esa declaración se ejecuta. Si no tienes más if y un else if y más que en todo ese bloque solo se ejecutará uno de esos bloques. Entonces como vemos aquí, tenemos ah, J igual a cinco. Y entonces decimos: Si J es menos de cuatro, hazlo bien, no, eso es falso. Si J es mayor que seis leche, eso es falso. Y así bajamos a la declaración final else, que es la que ejecutaría a Booleano. Los operadores pueden usar todos los pequeños, uh, tipos de operadores que veas en el lado derecho. Ahí, el menor que mayor que igual, igual, no igual guerra y otra cosa sobre condición. ALS, aunque generalmente cuando escribes en sentencia if, pondrás llaves después de ella para agrupar el código que viene después de ella en un bloque. Si solo hay una línea, no necesitas las llaves. Entonces si solo estás teniendo como el ejemplo, es en esta página con el sistema que fuera punto imprimir Linds, realmente no necesitas las llaves. Pero se considera una buena práctica ponerlos. Si solo tienes una línea siguiendo tu si la forma estándar de hacerlo es cómo se ve en la parte inferior derecha donde lo pones en la misma línea que la declaración solo para enfatizar a las 10.2 personas que hey, esta es una sola línea Si bien, esta declaración de cambio, uh, esto es similar de nuevo a muchos otros idiomas en los que estás activando algún valor, J um, tienes con los casos dentro de la sentencia switch, y lo que coincidan es lo que va a ejecutar , um, mirando el caso a caso tres. Entonces, por ejemplo, digamos que si J es igual a dos coincidencias, caso a él seguirá ejecutando hacia abajo la lista de declaraciones hasta que llegue a una sentencia break . De acuerdo, entonces generalmente, en cada caso, cuando termines al final, necesitas poner un freno ahí. Ese es un gotcha típico para los programadores en la parte inferior. También hay una sección por defecto, que, por supuesto, ejecuta si ninguno de los casos anteriores coincide. Um, generalmente, tienes un valor predeterminado cuando escribes un interruptor, pero no necesariamente todo el tiempo. De acuerdo, mientras bucles y hacer bucle. Entonces un bucle salvaje es algo así como en su declaración, en el sentido de que toma una expresión booleana. Pero el bucle while seguirá ejecutando su bloque hasta que esa expresión se vuelva falsa ¿verdad? Entonces es exactamente lo que dice mientras Jay Lección 10. Haz esto aquí, claro, Dentro de ese bucle, será mejor que estés cambiando el condicional o de lo contrario sólo va a ser un bucle infinito, ¿ verdad? Si dijiste que mientras cinco es menos de 10 y luego pones ahí un bloque de código, eso va a ser un bucle infinito, así que ten cuidado. También puedes revertir el orden. Se puede decir hacer el bloque primero, mientras que hay una condición y eso se llama a hacer while loop. Um, por la razón que sea, esos no son realmente tan comunes de ver en el código cotidiano, pero ciertamente el equilibrio en Texas. De acuerdo, el incremento y Decker Ament off operadores nuevamente si has hecho C o C plus, ya sabes todo esto. Pero si no tienes otros lenguajes puede no tener este tipo de sintaxis. Si tienes una variable entera como Jay y dices, J Plus Plus, eso es lo mismo que decir, J es igual a J Plus uno o J menos menos. Eso es un perjuicio. J es igual a J menos uno. De acuerdo, entonces estos atajos de aire para incremental y deck restante y luego si caíste al fondo, hay un post fix y una notación de prefijo. Entonces lo que eso significa es, cuando dices J plus dice, ejecuta esta declaración, y cuando termines increment J. En el fondo, se ve donde dice sistema fuera. Berlín Plus Plus J Y lo que eso le dice al compilador es primero increment J. Y luego ejecutar esta declaración para que puedas ver en los llamados outs con los resultados de los de ese poquito de codificación que ahí se imprimirían. Hay otros atajos en el texto que tienes por aquí en el lado derecho. Digamos que tienes una energía. J es igual a uno, y tú dices J más equivale a cuatro. Eso significa que J es igual a J más cuatro. Entonces en lugar de un incremento, es agregar algún valor extra que suministres y luego asignarle eso a la original esa variable para que veas este tipo de atajos en impuestos por todo el lugar, sobre todo aquí en el cuarto. Se trata de un pan riel y mantequilla de programadores, y el bucle de cuatro tiene una declaración de cuatro que tiene tres secciones y luego seguido por el bloque de código que se hace bucle sobre que se ejecuta repetidamente. Por lo que generalmente hay algunos. El modo típico de ver esto es que hay un contador de bucle y en este caso que ese es la variable J, y lo declaras en la primera sección. J es igual a cero caso que eso crea la variable J e inicializa cero. Entonces se ve un punto y coma. Entonces, en la siguiente segunda sección, hay una expresión booleana que dice, sigue ejecutando este bucle o stop right, y que se evaluará en la parte superior de cada bucle ya que bucle alrededor de esto ya que bucle alrededor de esto para bucle. Y luego en la tercera expresión después del segundo semi colon, donde dice J plus, ese es el tipo de ah, loop, final del bucle trabajo que haces. Y así en este caso, este es un bucle muy estándar para. O simplemente estás diciendo que quiero mirar esta cosa 10 veces y así que solo estás creando un contador. Estás diciendo Contador igual a cero mientras que los contadores menos de 10 hacen esto y luego contador más. Y esa es una sintaxis muy estándar. Ahora no tienes que tener un contador de bucles. Ese es un entero como este en tus cuatro bucles. Hay otras formas de hacer esto. Es sólo un poco limitado a tu imaginación, pero estos son los estándares en el texto. Tres, um, una nueva declaración de inicialización. Ah, expresión booleana. Y luego algún tipo de trabajo que hacer al final del bucle, seguido de un bloque de tickets de código ejecutados cada vez que pasa el bucle. Entonces este particular uh, cuatro bucle que está en la pantalla imprimiría 0123456 79 y luego se detendría bien dentro de cuatro bucles, usted conduce. Um y esto también funciona para donde bucles salvajes y hacer bucles también. Tenemos dos palabras clave especiales. Rompe y continúe. Entonces lo que dice descanso es que lamento empezar con continuar. Lo que dice continue es que si llegas a una sentencia continue dentro de un bucle for, abortamos el resto del bloque de código que está ejecutando su hacemos la cláusula de mantenimiento look , la tercera cláusula, el J plus plus. Y luego volvemos a la cima y empezamos de nuevo. OK, así que continúa Solo dice, Vale, detén este bucle de la esta vez a través del bucle, vuelve a la cima y empieza de nuevo. Pretende que terminaste todo el asunto. Y entonces la segunda palabra clave es break que dice, Simplemente deja de ejecutar este bucle continuamente. Simplemente finge que llegas al final y saltas y continúa con el resto del código fuente . Y así aquí tenemos un bucle que corre desde, uh, uh, J es igual a cero j menos de 10. Por lo que los valores que J se lleve a casa serán de cero a nueve. Y cuando si J es menor de cinco, eso continúa, por lo que no llega al sistema fuera declaración de línea de impresión por lo que no se imprime nada una vez que J llega a cinco, entonces ya no ejecutamos esa declaración continue porque es custodiada por un condicional ahí. Y ahora empezamos a imprimir en la parte inferior. Correcto. ¿ Ves la salida? 567 ocho. Pero en el momento en que llegamos a ocho ahora, la tercera declaración en el bucle, si j mayor que siete ahora se hace realidad y golpeamos la declaración de frenos y salimos del bucle y nunca tenemos oportunidad de imprimir el número nueve porque nosotros cuando j es igual a ocho, golpeamos los frenos. Declaración en el bucle, termina, romper continuar son muy importantes de entender. De acuerdo, así que ese fue un recorrido bastante torbellino. Uh, vamos a tener un ejercicio extra ahora dedo del pie te ayudan a lidiar con este tipo de Skype de Syntex y el aire de instrucciones en la hoja de instrucciones llamada 05 sintaxis básica. Y sí vamos a seguir adelante y tomarnos su tiempo ahora mismo para ir y hacer ese ejercicio. Puedes pausar el video y luego cuando termines, puedes volver a arrancar el video, y luego estaré haciendo ese ejercicio en vivo en el video. Entonces en caso de que hubiera algo de lo que no estuvieras muy seguro o solo quisieras escuchar lo que tengo que decir al respecto. Um, eso va a seguir en cuanto termines aquí. Muy bien, echemos un vistazo al ejercicio básico de sintaxis que tuvimos en el área del proyecto. Simplemente voy a pasar por todos los pasos del ejercicio, si tuvieras curiosidad por escuchar cómo funcionó son, ya sabes, mira alguna forma de hacerlo. Entonces, uh, dice sólo toma el hola World Project del capítulo anterior. Todo lo que vamos a hacer es juguetear con la sintaxis en el método principal que escribimos antes y ver cómo funciona. Por lo que el número uno dice declarar tres. Terminaron tus variables. I j y K un signo Valores variables toe I NJ y deja k ser el algunos e imprimir el valor. De acuerdo, bueno, ya es bastante fácil. Entonces, pero, uh, consigue un poco de espacio aquí y decimos, Bien, hagamos que eso sea igual a cuatro. Y J es igual a dos inquilinos rey porque yo j bien. Y luego dice, imprímelos. Uh, hay un poco de atajo aquí. Un eclipse que sí. Fui S Y S O y luego controlé el espacio. Y eso es lo que llaman una plantilla. Un eclipse. Pero hagámoslo. Después lo llena para el personal. Tengo que correr esto. En realidad puedo hacer clic dentro del archivo y decir, Ejecutar como aplicación de trabajo y se imprime seis, que es lo que cuatro más dos deben ser justo entonces, como un ser la diferencia en el producto e imprimir esos valores a su vez. Entonces, básicamente, es lo que significa. ¿ Es esta KB la diferencia? Por lo que menos j derecho imprimir K. Y entonces el producto significa multiplicación. Bueno, y ahí vamos 6 a 8. Exactamente lo que esperarías ver. De acuerdo, um número tres ahora crea otra variable Actos de tipo doble. Mira, el cociente de I NJ Deja que X sea la cuestión de mi motor. Imprimir la respuesta. De acuerdo, entonces hagámoslo. Ya veremos a qué estamos llegando aquí. Doble X igual que yo más frío, J um, y hagamos algo aquí para que esto sea más interesante. Cambiemos yo 25 Estos resultados serán un poco más interesantes. Uh, oops. X Por cierto, sólo estoy golpeando. Si estás usando Eclipse en Windows, estoy usando Control F 11 y eso dice, Ejecuta el ejecutar herbal de nuevo. Por lo que la primera vez que tengo que hacer clic derecho y guardar ejecutar como aplicación Java. Pero después de eso, solo soy control Si 11 control después de 11. De acuerdo, entonces lo que tenemos es yo sobre J, que es cinco dividido por dos, y eso es igual a 2.0. Eso parece un poco raro. Y de hecho, el número tres A dice que sí. Entonces es el aire saliendo un poco extraño. Y la respuesta es, sí, porque dividir imágenes por imagers siempre devuelve un imager, pesar de que lo asignamos a esta variable de doble precisión X. Entonces lo que pasa es que divido por J que crea a la energía para y entonces eso se convierte en un doble para asignarlo a X. Eso no es realmente lo que esperábamos. Entonces lo que tenemos que hacer es cambiar o yo o J para no quedar ilesos. Y la forma típica de hacerlo, como se señala en el en el libro, es multiplicarse por 1.0. Está bien, es una especie de cosa no parecida que hacer. Pero de esta manera multiplicación de 1.0 veces me cambia a un número de punto flotante, doble número de precisión. Y luego te divides por Jason. Ahora tenemos 5.0 dividido por dos. Y lo que debemos conseguir es 2.5. Eso es lo que esperaríamos. Está bien, vámonos. Veamos qué más tenemos. Crea un bucle que imprime cuente cero una bla, bla , bla , bla, bla hasta contar. Nombre. Muy bien, así que este es un problema de bucle for. Ahora. Realmente no puedo decir en yo igual a cero aquí. A ver, el compilador va a decir Espera, ya usaste yo Y tiene razón. Entonces y he usado yo j por si acaso vamos a usar en como bucle aquí. O otra cosa que podría hacer es en lugar de declarar un nuevo, valioso muy bien, podría simplemente decir que grupos I igual cero grito menos de 10 yo más más. Entonces esa es otra forma posible de hacerlo. O podrías haber dicho int en igual cero y menos de 10 y más. Además, ambos funcionan y vamos a imprimir conteo. OK, así que cuente espacio más alto. Vamos a ejecutar esto y a ver qué pasa. Déjame conseguir un poco más de visibilidad aquí en el en el cabildo. Está bien, así que ahí vamos. ¿ Ves? Cuenta cero para contar nueve. Ahora, ¿cuál es la siguiente cosa si la salida va a ser contar siete. También, imprimir bingo. Está bien. Interesante. Entonces lo que puedo decir es, si yo la gente siete. Probemos eso. Ahí vamos. ¿ Ves? ¿ Aquí abajo? Uno es como el conteo siete. Obtienes aviso de bingo. Pongo el comunicado en la misma línea que si ahora no tienes que escribir trabajo de miembro. Ignora las palabras blancas. Correcto. Para que pudieras hacer esto. Incluso podrías hacer esto. Eso es realmente confuso para la gente que viene tras de ti. Y la razón por la que a la gente generalmente no le gusta esto tampoco es porque parece un bucle for normal. Y podría verse tirantes rizados. Había. Estabas que no existen. Podrías empezar a hacer algo como esto. Ya sabes, K es igual a cuatro y piensa que es parte del bucle cuatro o del Bloque If. Más bien no está bien. Entonces con el fin de evitar que la gente piense que generalmente hacemos esto. Está bien. De todos modos, ¿Cuál es nuestro próximo poquito de magia aquí? Um, no imprima nada si el conteo es menor a tres. Entonces hay dos formas de hacer esto aquí, verdad? Um, uno sería decir, Bueno, eso suena condicional, escribe Voy a decir si soy mayor luce mayor que o igual a tres. Entonces haz el dinero, mi grabando sus nueces otra vez. Ahí vamos. Entonces eso funciona. Sí dijo que si la salida es menor a tres, no la imprima. Esa es una forma de hacerlo. Otra forma de hacerlo es ejercitar algo de tu ruptura. Continuar. De acuerdo, así que dices si soy menos de tres continuó, así que no se rompa. Porque si rompes el bucle de cuatro terminará y ya no se ejecutará. Y tú impugnas eso si quieres. Pero continuar dice seguir adelante. Pero simplemente omite el cuerpo del bloque para estos valores y salga del bucle si el conteo es ocho o más grande. De acuerdo, bueno, ¿sabes qué? Eso No, no decía si todavía debíamos imprimir ocho o no. Vamos a seguir adelante e imprimirlo va a ser agradable. Si por es mayor o igual que comer brink. Correcto. Entonces ahí vamos. Se detiene a las ocho. Ahora, no imprime nueve. Y sólo para asegurarnos de que esto se entiende, um, pongamos otra declaración después del bucle. Una vez que salgas del bucle, ejecución continúa justo debajo de la. Entonces lo que deberíamos ver es después del conteo ocho. Deberíamos verlo. Ve. Hecho. De acuerdo, ahí vamos. Entonces eso es un poco de tipo de garabatos con java solo para practicar con algunos de los, uh, elementos de sintaxis que tenemos en Java. Uh, no usamos todo,claro, claro, pero espero que eso te acostumbre a escribir algunas líneas de código. Muy bien, En el próximo capítulo, empezaremos a hablar de clases y objetos. Entonces es cuando empieza la diversión. Ya veremos que 7. clases de objetos de 06a: De acuerdo, Bienvenido de nuevo al Capítulo seis, donde empezamos a sumergirnos en clases y en los fundamentos de la programación orientada a objetos. Por lo que sólo visita Visión general para este objeto de capítulo durante el programa se basa en clases. El trabajo está orientado a objetos. Todo el código Java ocurre dentro de una clase. Por lo tanto, necesitamos aprender qué son las clases. De acuerdo, este es un capítulo realmente largo. Por lo que lo he desglosado en cuatro secciones sobre clases, atributos constructores y métodos y los haré 12 veces al final de cada sección. Serán un poco de trabajo en nuestro proyecto, y para cuando terminemos, el capítulo lo tendrá. El proyecto corriendo de manera rudimentaria. De acuerdo, entonces Sección A qué? De todas formas las clases de hacker. Entonces, ¿cuál es el punto? ¿ Por qué todo este hoopla sobre orientación a objetos y clases y cosas así? Bueno, esto es una discusión profunda, pero para empezar, se puede imaginar a alguien que, desde el equipo de producto viniendo y diga: Hey, Hey, los clientes pueden tener dos cuentas, y entonces el desarrollador responde con algún desarrollador gobbledygook. ¿ Cuál es el problema aquí? Bueno, claramente hay una brecha de comunicación entre los dos. El dueño del producto tiene cero confianza en que el desarrollador entiende cualquier cosa de lo que acaban de decir. Hay muy poca capacidad para rastrear lo que está pasando. Y el desarrollador tal vez cometería un error. A lo mejor se equivocaron uno de estos nombres de gobbledygook, ¿ verdad? ¿ Sería mejor que el desarrollador dijera algo como esto? Abrazo a uno de la clase de cliente y tenía otra cuenta? Oh, bien, ahora el número uno, hay menos traducción yendo y viniendo entre los dos vocabularios y el número dos, el desarrollador realmente puede hablar con la persona del producto. Está bien, este es un ejemplo de juguete aquí, Pero cuando se habla de un gran proyecto con decenas y decenas y decenas de nombres, y si todos están traducidos de clientes, habla con ingeniero habla. Eso realmente pone una carga en tu cerebro de tratar de traducir todas esas cosas constantemente. Es como el buen producto que la gente está hablando en inglés y tú estás pensando y ruso o algo así, o viceversa. Otra razón por la que la gente habla de orientación a objetos es que, um construyendo que los conceptos del software basados en los conceptos del problema. Entonces, en otras palabras, si tienes ah, tu producto, gente habla de clientes y cuentas. Si estructuras tu software alrededor de los conceptos de clientes y cuentas, esa es probablemente una base bastante estable. Por ejemplo, si estás construyendo una biblioteca, ya sabes, biblioteca tiene recurso es prestar. Tienen bibliotecarios. Tienen mecenas. Tienen préstamos de. El recurso es ese tipo de sido la situación desde hace siglos. ¿ Verdad? Por lo que su software probablemente sea seguro organizándose alrededor de esa, um, forma de encontrar la arquitectura. De acuerdo, Entonces, ¿de dónde salieron estas clases? Bueno, generalmente, están inspirados en el sustantivo en la descripción del problema. Muy bien, Así que bien, ¿ahora qué? ¿ Qué estamos diciendo? Sigamos adelante y veamos nuestro proyecto, y luego averiguaremos cuáles podrían ser algunas clases en él. Entonces, ¿cuál va a ser nuestro proyecto? Vamos a estar construyendo una simulación de un juego de mesa libremente basado en el juego de mesa llamado . Perdón. Si alguna vez has jugado a eso, sabrás de lo que estoy hablando. Si no, no te preocupes. Lo vamos a hacer. Versión tonta de la misma. Por lo que muy flojo. Ahí hay una tabla con 60 plazas. Múltiples jugadores pueden jugar el juego. Cada uno puede tener múltiples piezas, las piezas aire sentadas en una plaza en cualquier momento dado y Hay una baraja de cartas de la que sacas, y te dice cómo mover la paz justo en este momento. Para esta iteración, sólo vamos a considerar tarjetas que hagan avanzar la paz. Pero si estás familiarizado con lo siento, sabes que hay diferentes tipos de cartas que mueven la pieza hacia atrás y hacen otro tipo de locuras. Por lo que más adelante, introduciremos algo de eso. De acuerdo, esto en realidad es lo suficientemente bueno. Esta pequeña, ya sabes, descripción del problema de 50 palabras es lo suficientemente buena como para empezar a hacer en algún análisis sobre si quieres. Cuando llegamos al proyecto en sí, hay muchos más detalles ahí para ti. De acuerdo, así que piensa en el sustantivo en esa descripción del producto en la página anterior y simplemente escríbelos en un trozo de papel y tal vez denos un minuto o dos de reflexión en cuanto a cómo están relacionados. Por ejemplo, dijo que el jugador tiene un montón de piezas. De acuerdo, entonces sabes que puedes trazar una línea de jugador a paz o algo así para demostrar que están relacionados. Entonces lo que debes hacer ahora es solo pausar el video por un momento. Volveré a esta diapositiva posit aquí mismo. Tómese no más de un minuto o dos para pensar en los extremos de sustantivo en esa sección de requisitos sueltos y escríbelos en un trozo de papel, tal vez dibuje algunas líneas de como podrían estar relacionados. De acuerdo, así que pausa el video y cuando termines, adelante y vuelve a iniciarlo. ¿ Todo bien? Ojalá hicieras el ejercicio, y aquí están, los que iban a estar usando. Por lo que ojalá se te ocurrió algunos de estos. En primer lugar, hay un concepto de nivel superior del juego lamentable, ¿ verdad? El juego lo juegan los jugadores. Los jugadores tienen piezas. El juego tiene un montón de plazas. Hay una baraja de cartas, ¿verdad? Tenemos todas estas cosas diferentes. He elegido estratégicamente los conceptos que pongo en esta diapositiva para los que vamos a necesitar para el proyecto. Entonces, por ejemplo, podría haber llegado con un tablero porque el juego tiene un tablero que tiene el aire de las plazas en el tablero. Resulta que cuando escribimos el código, realmente no necesitamos la clase de tablero. Es como que se interpone en el camino. Por lo que acabo de quitarlo aquí. Entonces estoy haciendo trampa un poco, ¿verdad? Um, un par de puntos sobre este modelo aquí. En primer lugar, sólo está parcialmente terminado. Vamos a seguir trabajando en ello. Se trata de un modelo de los conceptos de los requisitos. Correcto. Entonces esto es lo que llamamos un modelo conceptual y las cosas como la paz y la plaza y la tarjeta. Esos conceptos de aire y la notación que estaban usando se llama UML el lenguaje de modelado unificado , que es una especie de solo la forma estándar que tenemos, ya sabes, notación de modelado predefinida para hacer modelos de software sistemas. Entonces si vas a dibujar sistemas de software con cajas y flechas y líneas y cosas así , deberías usar UML porque hay un significado estándar para el, uh a todos los elementos del diagrama. De acuerdo, entonces lo que estamos haciendo aquí se llama objeto o en análisis, que generalmente es seguido por el diseño. Entonces, ¿cuál es la diferencia? Si bien el análisis se trata de entender, sus requerimientos y diseño está de acuerdo, cómo vamos a construir el software. Se entrelazan realmente a la perfección, cual es algo maravilloso sobre el desarrollo de software orientado a objetos, pero también causa cierta confusión porque se puede confundir el análisis para el diseño y viceversa . Si no tienes cuidado, um, toda esta discusión sobre objeto o en análisis y diseño, O y G, como lo llamamos, Es enorme. Es fascinante, um, amor sumergirse en eso. Pero esta clase es realmente sobre Java, así que no nos alejemos demasiado de la pista. Uh, estamos tomando muchos atajos a través de la vía de análisis y diseño para que podamos llegar al trabajo una parte del de la clase. Entonces si te interesa esto Lo siento por eso. Hay un montón de referencias por ahí. Puedes ir a leer sobre esto, pero volvamos a Java aquí. Muy bien, Entonces, ¿cómo codificas una clase? Bueno, ya hemos visto esto antes. El contorno básico de una clase se parece a esta clase pública, y luego el nombre de la clase y luego llaves a donde va el código. Muy bien, um, público se llama modificador. Hay otros modificadores además de público. No te preocupes por ellos. Ahora, hagámoslo público Bueno, sólo éste es el más por mucho el más común, y sólo seguiremos haciendo esto. Muy bien, Así que ahora estamos listos para el primer ejercicio. Entonces vamos a entrar en el I.D. I.D. E. Vamos a crear un nuevo proyecto llamado Sorry Game, y vamos a ir a través de cada uno de los conceptos en nuestro pequeño diagrama que teníamos en las diapositivas y vamos a crear una clase para llegar a uno de ellos. Por el momento, no los vamos a enganchar ni hacer que trabajen ni hacer nada por el estilo. Eso será en el siguiente apartado de este capítulo. Pero hay tres secciones más por venir, así que no te preocupes. Tendremos que lo tendremos funcionando al final para los detalles. Buscando tus instrucciones de ejercicio. Una vez que hayas terminado con eso, ah, puedes volver. Y sólo siguiendo esta diapositiva, voy a trabajar a través de ella yo mismo en pantalla para ustedes chicos. Para que ustedes puedan echar un vistazo y asegurarse de que entendieron todo y luego pasaremos a la siguiente sección sobre atributos. Así que pausa el video aquí mismo. Adelante y haz tu ejercicio. Cuando termines, puedes retomar el video y puedes verme hacerlo. Muy bien, probemos este ejercicio. Entonces aquí estamos en el cuaderno de ejercicios para el Capítulo seis, y la primera sección aquí es sobre los requisitos del juego. Entonces espero que leas esto porque aquí hay mucho más detalle. No voy a pasar por ello contigo. Puedes leerlo fácilmente. Uh, también las simplificaciones. A realmente importante. Estamos haciendo muchas cosas tontas ahora mismo. Al igual que un solo jugador, solo una pieza, solo una carta, solo un chico cuadrado. Esto es un poco ridículo, pero en el siguiente capítulo, estaremos arreglando eso en los próximos varios capítulos. De hecho, um, sigamos adelante. Whoops. Perdón. Pasemos a hacer ejercicio a. quiero un poco demasiado lejos aquí. De acuerdo, así dice crear nuevo proyecto de Ingrid al que d llamé. Perdón. Juego. Está bien, así que vamos a hacer eso. Diré y eclipsaré. Puedes hacer click derecho en todas partes. Ahí está el contexto. Ming es nuevo trabajo. Un proyecto. Perdón. Juegos. No quiero poner en un espacio ahí. Conseguimos trabajo 11. No queremos de nuevo la información del módulo. Ponga eso y podemos abrir esto y ahí está nuestra fuente Director. Genial. Um, está bien. Uh, vamos a empezar a crear clases. Entonces vamos a crear estas clases o algunos consejos sobre. Estamos tratando de mantenernos al margen del trabajo un sistema de nueve módulos por ahora, porque solo el dolor. Y así queremos poner todo lo que se llama el paquete por defecto. Esperemos que tu yo d te permita hacer eso. Si no, si insiste que agregas un nombre de paquete usó el juego de nombres y luego hablaremos de paquetes más adelante. De acuerdo, vamos a crear estas clases. Perdón, Jugador de juego cuadrado. Empecemos con eso para que pueda simplemente dar clic derecho aquí diciendo Nueva clase C. Lo siento juego. Ahora no queremos agregar una especie de método principal esta vez, así que deja estos sin marcar. Está bien. Perdón, jugador del juego. Veamos cuáles son los otros. Pieza cuadrada. Ya que hacer esos van a hacer este va a ir a la plaza. Irá pieza, tarjeta decadente. Auto Onda. Genial. De acuerdo, así dice que no necesitamos agregar ningún código más, volveremos y lo haremos a continuación. Entonces una cosa de lo único que debes estar seguro es que no hay Big Red X está en cualquier lugar que diga que el código no se puede compilar bien, y en realidad, eso es todo y en realidad, para la Sección A solo fue conseguir estas clases en su lugar. Ahora fíjate de nuevo. Estos son los conceptos a partir de los requisitos documentan estos aires. Ya sabes, el juego, la plaza, el jugador, la paz como estas fueron cosas de las que escribimos cuando empezamos a hablar de los requisitos del juego. Y esa es una especie de la esencia de la orientación a los objetos. Entonces, hasta ahora, tu programa no hace nada porque solo hay un montón de bosquejo. Las clases estarán arreglando eso en las próximas secciones. Está bien, eso es todo para esta sección te veremos en la siguiente sección, Sección B. 8. Atributos de objetos 06b: De acuerdo, bienvenido a la segunda sección de este capítulo, que es la sección B sobre atributos. Por lo que resulta que un objeto clases de orientación pueden tener atributos, lo que representa datos que pertenecen a las instancias de esas clases. Entonces, ¿qué quiero decir con eso? Bueno, echemos un vistazo a la idea de una tarjeta. El carnet de clase lo lamentamos. La simulación de juegos tiene cartas en ella, y cada una de ellas tiene su propio valor único. Y el valor aquí es un entero. Eso es lo que representa el I M. T. Entonces, en otras palabras, el valor es un número como 12345 y cada tarjeta tiene un valor. Entonces en el diagrama de clase todavía, estamos de vuelta el análisis. Aquí podemos marcar eso abajo dando la tarjeta de clase sobre atributos llamados valor. Y luego después del colon está el tipo que es imager. Ahora, ¿qué significa exactamente esto? Entonces tenemos que entender la diferencia entre clases y objetos. Esto es realmente clave en la programación orientada a objetos. Las clases representan planos o fábricas para crear objetos. Los objetos también se denominan instancias. Ahora. Ah, la palabra objeto está un poco sobrecargada porque tenemos programación orientada a objetos tienes un montón de cosas que la gente llama objetos. El término instancias un poco más preciso sobre lo que estamos hablando aquí. Entonces trataré de usar esa palabra instancia. Pero perdóname si digo objetos a veces. ¿ Cuál es la diferencia? Bueno, una clase que ya hemos escrito algunas clases ahí en código fuente, Correcto. Abriste un editor y escribiste jugador de clase pública. rizado, caja rizada. De acuerdo, esa es una clase de Java. Todavía no hace mucho, pero es una clase. Estos código fuente de aire, uh, construcciones. ¿ Dónde están las instancias? Si bien las instancias no se crean hasta que se ejecuta el programa por lo que existen en la memoria de la computadora en tiempo de ejecución, no existen en el código fuente. ¿ Verdad? Por lo que tienes una clase del tipo dado. Por lo que escribiste jugador de clase pública. Ese es el único expediente que tienes. Eso es jugador dot java que tiene un jugador de clase pública. ¿ Verdad? Pero en tiempo de carrera, cuando ejecutemos esto, espero que nuestro juego pueda tener más de un jugador eventualmente, porque de lo contrario es bastante aburrido. Sabemos quién va a ganar, ¿verdad? Se puede tener una cotización unquote número ilimitado de instancias. Por supuesto, si lo piensas. Si existen en la memoria de la computadora, entonces no puedes simplemente crear un número infinito porque te quedarás sin memoria. Pero no hay un límite fundamental en el número de instancias que se pueden crear a partir de su archivo de una sola clase. El archivo de clase define los atributos como vimos una tarjeta tiene un valor o abajo abajo. Vemos que un jugador es un color que sabes tiene un color. Entonces, como tienes el jugador azul, el jugador verde cuando estás jugando Lo sentimos, eso Esa es la definición de los atributos, Dice el archivo de la clase. Todo jugador tiene un color, pero son las instancias mismas las que tienen una copia de ese atributo y tienen su propio valor único . Entonces aquí te dejamos un poco más UML. No te preocupes demasiado por la notación. Es solo una forma conveniente de anotar citas con él. Pero a la izquierda, tenemos el diagrama de clases con el jugador de clase, y decimos que cada jugador tiene un color, y ese color es la cadena. Son sólo algunas cartas. Um, eso es una especie de la, uh, la capa abstracta. Ya sabes, el jugador es un concepto en tiempo de carrera. Vamos a crear instancias de jugadores y han sido nombrados aquí jugador, un jugador a jugador tres, y cada uno tiene su propio color. Por lo que el Jugador uno tiene el color Verde El jugador dos tiene el color rojo y el jugador tres tiene el color azul. Aquellos de los atributos dudan, valores. Entonces solo para hablar un poco de la notación, solo para que no sea súper confuso. Ya ves como el jugador uno aquí está subrayado. Y, uh, entonces dice jugador frío. Entonces el subyacente en, um el que indica este cuadro representa una instancia o un objeto en tiempo de ejecución. Esta parte de a la izquierda del colon es el nombre de la misma, en caso de que quieras hablar de ello y decir, Mira jugador a bien ¿cuáles? Jugador a mientras este se nombra jugador dos. En el lado derecho del colon está la clase de la que viene. Entonces estamos diciendo que esta instancia se forma a partir de esta definición de clase, y luego, si te gusta una pequeña línea, puedes decir OK, aquí están los atributos que define la clase y qué valor tienen. Por lo que el jugador al que estamos llamando jugador uno tiene el valor G R. E E N Para el atributo de color en la clase de jugador, el jugador tres tiene el valor de atributo de color de azul. Muy bien ahora, medida que pasamos por este capítulo, Will Seymour sobre esto sobre cómo crear instancias cómo asignarlas. Son valores de atributo. Ya sabes, esas podrían ser preguntas que tienes ahora mismo, pero llegaremos a eso. No te preocupes. Aquí hay mucho. Teoh Impac, ahora el jugador que tiene un atributo de tipo, color de color de tipo string. Eso es lo que llamamos unos simples atributos. Es como, ya sabes, si tienes una cadena o un número o booleano o algo así, esos atributos simples del aire. Pero lo que es realmente interesante una orientación a objetos es que las clases pueden tener atributos mejor otras clases. Entonces mientras seguimos haciendo análisis aquí y llegaremos al código en tan solo un minuto, la forma en que denotamos eso es dibujando una línea entre los dos conceptos y diciendo: Sí, Sí, ahí hay una asociación. Hay una asociación entre jugadores y piezas, ya sabes, jugadores propios de piezas. Las piezas pertenecen a jugadores como si hubiera algo ahí, verdad, y esto va a funcionar su camino en nuestro código fuente. Esas líneas en el diagrama. En ocasiones tienen números apegados a ellos. Es posible que hayas visto que esos números se llaman facilidad de multiplicidad, y tienen un significado específico. Entonces desde el punto de vista del jugador, esta línea bajando aquí a la paz termina con un punto para y lo que eso te ayuda a leer, es decir, un jugador dado tiene algún lugar entre una y cuatro piezas asociadas a ella. Y si lees la otra dirección, una pieza dada se asocia dedo del pie un jugador. Está bien, entonces es sólo una forma de hacer un seguimiento de cuántas de estas cosas hay. Entonces antes de hablar de cómo esto se traduce en el código fuente, que será, ya sabes, la siguiente diapositiva, hagamos una pausa por un segundo aquí. Volvamos al modelo conceptual que dibujamos antes en las diapositivas, y sumemos los atributos que irrelevantes. Por lo que ya hablamos de cartas, tenemos un valor, y los jugadores tienen un color. Probablemente haya un par de otros conceptos ahí dentro que tienen atributos interesantes. Um, cuando haces esto, te puedes enloquecer en esto. Así que apegarse a lo que importa para la simulación del juego. Por ejemplo, aquí hay un buen ejemplo. En la vida real, una pieza en el juego lamentable tiene una altura y espera y cosas así. A nadie le importa nuestra simulación de juegos, ¿verdad? Si estás construyendo riel. Perdón, juegos. Eso es muy importante. Si los estás simulando en una computadora, nadie le importa cómo Contadas las piezas son correctas, así que puedes ignorar cosas así. Y luego una vez que hayas hecho una especie de los atributos simples, entonces piensa en cómo se asocian los conceptos entre sí. ¿ Cuáles pertenecen a qué? Y, uh, dibujar esas líneas condujo. Esta multiplicidad es de la misma manera que la pieza pertenece al jugador. Así que solo pausa en mi charla aquí por un segundo para darte la oportunidad de pausar el video, y puedes volver atrás y mirar el que ese diagrama y tal vez tardes unos segundos en añadirlo a los atributos en cuando termines, inicia el video de nuevo y lo revisaremos aquí mismo. De acuerdo, Esperemos, te tomaste unos segundos para hacer eso por tu cuenta. Esto es lo que se me ocurrió para este diagrama, ¿no? Entonces en cuanto a atributos simples, dijimos que la tarjeta tiene un valor que es un ent. El jugador tiene un color. Eso es una cuerda. Las plazas tienen un número. Entonces a medida que vas por la pizarra, sabes que las casillas están alineadas en orden cuadrado número uno donde Número dos cuadrado número tres. Por lo que es agradable saber qué plaza es cuál. Por lo que les di un número. También di las piezas en número. Ningún jugador tiene cuatro piezas o entre una y cuatro piezas según nuestro modelo. Y realmente, las piezas aire intercambiables. Pero sí tienen algún tipo de identidad, y la razón por la que puse el número en la pieza es para que eso realmente sea lo que veremos construir este proyecto fuera es, me gustaría saber cuando una determinada pieza se alinee en cierto cuadrado. Voy a imprimir algo en la consola que dice Paz número cuatro para Player Blue aterrizó en la Plaza 14 y es bueno tener esos datos para poder subsanar esas declaraciones de depuración para que podamos ver que las cosas realmente funcionaban en términos de la de asociación. Esperemos no sea demasiado sorprendente que la baraja tenga un montón de cartas y las cartas estén en una baraja. Um, el juego lamentable tiene un montón de plazas ahí. 60 en el caso de la pena. Y tenemos entre uno y cuatro jugadores jugando el juego. Y ya sabemos que el jugador tiene de 1 a 4 piezas. Ahora. Otro interesante aquí es que se supone que las piezas están sentadas en una plaza en algún lugar, ¿ verdad? Por lo que cada pieza en cualquier momento dado en el tiempo, está sentada en una plaza. Los cuadrados por este diagrama pueden tener piezas estelares. Eso significa que cualquier número asaltando cero al infinito. Sin límite. En un juego realmente lamentable. Si una pieza aterriza en una plaza que otra pieza te ocupa, tívalos y envíalos de vuelta a su casa. Estamos simplificando nuestros requisitos aquí. Simplemente vamos a dejar que cualquier número de piezas se siente en un cuadrado dado. Eso sería algo divertido para que ustedes trabajen después de que termine la clase. Si quieres generalizar el dedo modelo incluir cosas así, uh, en se podría decir que uh, podría haber un argumento hecho para decir, Oye, todo esto pertenece al juego lamentable, incluyendo las piezas en las tarjetas. ¿ Por qué no hay líneas ahí? Sí, podrías, um, um, meterte en los detalles del análisis de objetividad. Nuevamente, está un poco más allá del alcance de lo que queremos hablar aquí en general. Simplemente diré que realmente no te hace mucho bien crear un concepto como un juego y luego simplemente dejar caer, comer, comer, dibujar líneas a cualquier otro concepto en el diagrama. Eso realmente no sirve,Está bien, Está bien, así que intentamos dedo del pie, enfatizamos las que son más fuertes, sí, las piezas de la parte del juego. Pero realmente pertenecen al jugador. Eso es más importante entonces el hecho de que sean parte del juego. Está bien, vamos al código, ¿verdad? Entonces, ¿cómo se veían estos atributos cuando escribes código? Bueno, vamos a hacer la clase de jugador. Por lo que hemos estado mirando la clase de jugadores. Tiene un atributo simple de llamado Color of Type String y la forma en que escribes que aquí es, dices, color de cadena privada dentro de la definición de clase dentro de las llaves del jugador. Ahora hay algo nuevo aquí es esta palabra privada. Aplazemos la discusión sobre lo privado. También hay público. También podrías simplemente dejar fuera este modificador, pero en general es muy, muy común. Probablemente el 90% de los atributos que hay en el mundo real son declarados privados, y ese es un buen lugar por defecto para empezar. Es así como siempre hago mis atributos hasta que alguien, algo me dice que necesito que sean algo distinto de privado. Entonces, solo hagamos que todos nuestros atributos sean privados por ahora. Y más adelante en la clase volveremos y ya sabes, hablaremos de público privado y otros modificadores que tenemos. Entonces la otra que tenemos ahí dentro es la pieza. Entonces note cómo dijimos que teníamos esto, Uh, teníamos esta línea de asociación entre el jugador y la paz, y dijimos que Bueno, esto lo que esto significa es que el jugador puede tener un atributo de tipo pieza y o la paz tener un atributo de tipo jugador. Y aquí hemos entrado y dado al jugador en atributos llamados Paz con la pieza de nombre de Clase . Por lo que ahora notó que hay un capital en minúscula aquí. Esto es muy común en, sobre todo en Java, la P mayúscula representa la pieza de clase, ¿no? El pequeño P es sólo el nombre pequeñas piezas P, sólo el nombre de la variable, y podríamos haber llamado a esto cualquier cosa que le hubiéramos llamado solo p o P uno o cualquier otro nombre que queramos usar. Pero es muy común cuando solo tienes uno. En este momento, recuerden, estamos simplificando en esta primera ronda que sólo vamos a conseguir al jugador una pieza, um, sólo para decir paz privada, Paz. Simplemente llámalo paz. Algunas personas dicen la paz o su paz o algo así. Sólo voy a decir paz aquí ahora. Aquí hemos tomado una decisión de que el jugador tiene un atributo de tipo pieza, y eso se llama darle visibilidad al jugador a la paz porque puede citar uncomillas ver la pieza. decir, Esdecir,posee esta referencia, esta pieza variable, y por lo tanto puede hablar con la paz, que veremos en el siguiente capítulo que eso significa que puedes enviar mensajes a ella. Entonces, ¿qué es esto de la visibilidad para que el jugador pueda ver la paz? Pero ¿la pieza puede ver también al jugador? Por lo que aquí es de donde empiezas a moverte de nuevo. Del análisis al diseño y análisis. Ya basta con trazar una línea y decir, Sí, esas dos cosas estaban enganchadas. De alguna manera en el diseño, hay que saberlo porque, como acabamos de ver en la página anterior, si realmente no tienen atributo, hay que escribir el código, ¿ verdad? Por lo que no basta con trazar una línea. En realidad tienes que decidir a dónde va el código en general, cuando tienes visibilidad circular. Es decir, el jugador ve la pieza, y la pieza ve al jugador. Eso por lo general hay que evitar, no porque haya algo fundamentalmente mal, sino sólo porque puede llevar a la complejidad y a algunos problemas que, um, que tal vez sea mejor evitar. Creo que en general es Es las cosas eran más simples cuando la visibilidad tipo de fluye en una dirección. Entonces, uh, para los propósitos de nuestra simulación, solo les voy a decir que la pieza no necesita visibilidad del jugador, y sólo jugador necesita visibilidad a la paz. Entonces, en un diagrama de diseño, empiezas a agregar estas pequeñas puntas de flecha, y eso te dice si se trata de un diagrama de diseño de software, vale, el jugador tiene un atributo de tipo pieza, pero la paz no tiene un atributo de jugador tecnológico. Si lo hizo. Sería una flecha de doble cabeza, de doble cabeza aquí, que no es en este momento. ¿ Cómo puedo justificar eso? Bueno, no puedo escribir. Todo lo que puedo decir es que construí el proyecto antes de haberlo pasado, y no necesitaba la paz para poder enviar mensajes al jugador. No necesitaba la paz para ver al jugador, así que vamos a recortar eso y sólo tener al jugador de la CIA visibilidad a la paz. Una última cosa sobre los atributos antes de que vayamos a codificarlo. Ellos sí tienen valores por defecto. Entonces cuando se crea una instancia a partir de una clase y veremos que muy pronto, uh, los atributos deben tener todos valores específicos. Y así si no les asignas un valor, obtienen sus valores predeterminados de la máquina virtual Java. ¿ Y qué hay de los incumplimientos? Si bien los tipos numéricos como las heridas, los anhelos los anhelos , los flotadores , los dobles, ese tipo de cosas se establecen en cero Bull Ian's. Si tienes como un, uh, del lado derecho, ves matón privado y feliz, que es verdadero o falso, que se pondrá en falso y cualquier otra cosa. Eso es una referencia a una clase. En otras palabras, letra mayúscula aquí. Correcto De acuerdo con convención Ah, string es una clase, por lo que este nombre se establecería para saber. Entonces, ¿qué significa saber? No es un especial? Supongo que podría llamarlo una palabra clave en Java que denota la ausencia La ausencia de un objeto para que ese nombre variable se supone dedo del pie contenga una cadena de letras que es el nombre de la persona. Pero aún no le hemos asignado el nombre. Por lo que sólo tiene el nombre tiene el valor saber que dice que no hay cadena ahí. Ahí no hay nada, ¿verdad? Una nota rápida. Estos valores predeterminados solo funcionan para clases Cuando llegamos a los métodos más adelante en este capítulo, si define variable en el método, no obtienen estos valores predeterminados. parezca, toman este mismo valor que está indefinido, que es realmente un error de compilador si intentas usarlo antes de encontrarlo. Muy bien, vamos a hacer el ejercicio ahora por los atributos. Así que vuelve a tu proyecto y agrega de nuevo todos los atributos apropiados a nuestras clases Por el momento, hasta que podamos estudiar sobre un raise y colecciones y cosas así, vamos a asumir que hay uno de todo. Hay un jugador. Hay una pieza de hecho, habitar dentro. Supongamos que solo hay una tarjeta y un cuadrado, lo cual es algo ridículo. Pero sólo para que el juego funcione, y luego vamos a generalizar eso de verdad, muy rápido. Por lo tanto, revisa tus instrucciones de ejercicio que tenga las instrucciones exactas. Y voy a hacer una pausa para hablar aquí un minuto. Podéis pausar el video, ir a hacer vuestro proyecto, y cuando terminéis, volver y volver a empezar el video y echaremos un vistazo a cómo podría quedar bien la solución . Bueno, ojalá tuvieras oportunidad de hacer eso y trabajar en tu ejercicio. Vamos a echar un vistazo. Entonces cuando vamos y miramos esto en el en el, uh, instrucciones para el ejercicio tuvimos este ejercicio de sección. Sé atributos y ves aquí qué hay una línea que falta allí nunca había faltado. Pero aquí vemos que las nuestras cabezas y la multiplicidad está todas han sido ajustadas para este proyecto. OK, así que sigamos adelante y empecemos con el jugador porque ese es el que estábamos hablando en las diapositivas. Tiene este color de cuerda, y tiene una pieza ahora mismo. Entonces pasemos a eclipse y vayamos al jugador y diremos grupos privados, color de cuerdas y paz de pieza privada. Muy bien, volvamos aquí y diremos: Vamos a la voluntad de paz. Tiene cuántos atributos mientras que ahí está el número aquí. Pero luego también está la plaza, ¿no? Entonces vayamos a la paz. Y hay algo interesante que decir aquí, probarlo y numerarlo. Yo creo que así se llamaba eso, ¿ verdad? Sí, y ahora está tiene otro atributo de tipo cuadrado, pero no hay indicación de cuál debe ser el nombre de esos atributos, Así que podríamos llamarlo cuadrado de acuerdo con la forma en que las piezas de los jugadores acaban de llamar la paz. Pero en realidad, creo que en este caso hay un ah, mejor nombre porque ¿cuál es la plaza que pertenece a una pieza? Es la ubicación, la ubicación actual de la paz. Entonces las piezas sentadas en la pizarra en algún lugar en todo momento es, uh, a menos que se esté moviendo. Está sentado en la plaza, y esa es la ubicación de las piezas. Entonces en realidad voy a llamar a esa ubicación variable. No es necesario. Por supuesto, podrías nombrarlo. Lo que sea que te guste. El cuadrado en sí tiene. ¿ Cuántos atributos? Bueno, ahí está el número y no hay flecha saliente. Por lo que la plaza sólo tiene un atributo llamado It's Number. Eso cambiará a medida que sigamos. Pero empecemos con ese número privado. Es como si fuera cuadrado número uno cuadrado número dos. Uh, la tarjeta tiene uno atributos su valor, que hablamos también en las diapositivas. Seis. Particular, les digo, la baraja ahora otra vez para esta versión humilde, primera versión del del proyecto. Los mazos solo van a tener una carta, lo cual es una especie de cosa ridícula, Pero hagámoslo por el momento. Particular, tarjeta dura. Y luego lo último es el juego lamentable, que tiene un jugador, una plaza y la baraja, pesar de que aquí debería haber una flecha la cual se dejó caer. Pero eso está bien, así que tenemos un jugador, jugador privado, jugador, correcto, pero esa baraja en plaza privada. Está bien, así que ahora nota que en eclipse ya te está advirtiendo. Es como ¿qué está pasando? Es un oleaje. Has definido este campo llamado Jugador, y nunca lo has usado en ninguna parte. Es como, Sí, eso es correcto. En la siguiente sección o dos de este capítulo, comenzaremos a utilizar esos. Por lo que para el final de este capítulo tendrá una simulación en marcha. Va a ser aburrido porque sólo hay una plaza. Por lo que siempre sabemos dónde están las piezas que hay en esa plaza. Y siempre conocemos al ganador porque sólo hay un jugador. Pero llegaremos a eso mismo. De modo que con eso se termina el capítulo. Para los atributos, manténgase atentos para la siguiente sección. 9. Constructores de objetos de 06c: Muy bien, bienvenido de nuevo a la siguiente sección de este capítulo, que se trata de constructores. Cómo crear instancias a partir de clases. Entonces, hasta ahora, el problema que tenemos es que estamos tratando de hacer computación orientada a objetos sin ningún objeto . Por lo que simplemente declarando un nuevo atributos como jugador como en el juego lamentable tenemos jugador particular . Crear esa variable en realidad no crea una instancia del jugador de clase. Simplemente es como un dedo del pie de ranura aferrarse a un jugador, o es como declarar tu intención de crear un jugador en algún momento posterior, Así que eso no es bueno. Bueno, ¿cómo realmente creamos instancias? Bueno, utilizamos este operador llamado Nuevo. Esta es una palabra clave especial en Java, que crea una instancia del jugador toma lo que llamamos una especie de referencia como la dirección a ese jugador y lo almacena en la variable a la que le estás asignando como el jugador variable. Entonces se puede decir es, se ve aquí jugador igual jugador nuevo. Entonces muchos jugadores ahí, pero el nuevo operador, seguido del nombre de la clase y luego un par de forenses, y eso indica que estás creando un nuevo objeto. O para ser precisos, estás creando una instancia del jugador de la clase en este momento. Puedes llamar a esto nuevos operadores muchas veces como quieras. Se puede un jugador un jugador 23456 tantas veces como quieras para hacerlo hasta que te quedes sin memoria, como hablamos en la sección anterior. De acuerdo, entonces cuando tú en Stan, ella se comió una instancia. Cuando llamas al nuevo operador y creas una instancia, lo que sucede es que el JBM llamará a un constructor en esa clase, y eso permite a la instancia inicializarla en estado. Por lo que hablamos de los valores por defecto en la sección anterior. Generalmente no quieres los valores predeterminados. Quieres valores reales, ¿verdad? Entonces, ¿qué, en realidad quieres llenarlos? Entonces cuando llamas a este nuevo operador en el jugador de clase, va a llamar a este método aquí, que es un constructor. Ahora. ¿ Cómo sabes que esto es un constructor? Tienen una firma muy particular aquí. Generalmente, los hacemos públicos. No tienen que serlo, pero por ahora, asumamos su público. Después tienen el nombre de la clase, seguido de un perent. De acuerdo, entonces , uh, es un poco diferente a otros métodos. ¿ Firmas? Como veremos en el siguiente apartado, aquí no hay valor de retorno declarado. En realidad aún no hemos mirado en detalle otros métodos, pero lo veremos en un minuto. Y entonces, ¿qué puedes hacer dentro de las, uh, llaves del constructor de la clase de jugador? Se puede. Generalmente, lo que se quiere hacer es inicializar el estado. Entonces, ¿qué significa eso? Entonces tenemos esta pieza variable, y al igual que cuando tenemos un jugador no significa que tengamos un jugador. Instancia tampoco tenemos una instancia de pieza aquí. Entonces vamos a crear uno con el nuevo operador. ¿ Verdad? Entonces voy a llamar Pieza nueva. Voy a firmar ese valor a esta pieza variable. Y por supuesto, eso va a llamar al constructor a la clase de paz y así sucesivamente por la línea. Algo a notar aquí es que esto es lo que tiene especial los atributos de una clase es que dentro de los métodos de la clase, incluido el constructor, en realidad se pueden leer y escribir estas variables. Son como variables globales dentro de la clase de jugador, cierto, ahí privadas a la clase de jugador. Nadie más los puede ver. Eso es parte de lo que significa privado. Pero desde cualquier lugar de la clase de jugador, en realidad se puede hablar con el color. Se puede hablar con la paz. Está bien, bueno, mirando eso un poco más a medida que avanzamos. De acuerdo, entonces un constructor como lo hemos visto tan faras, ya sabes, útil. Pero sería bueno poder pasar algunos datos. Entonces, por ejemplo, en nuestro juego, eventualmente vamos a tener un jugador, un jugador rojo, un jugador azul, jugador verde, jugador amarillo. ¿ Cómo consigo esos datos en el jugador? ¿ Instancia? Porque no puedo codificar eso en el constructor, porque solo puedo escribir un color cuando hago el constructor. Entonces lo que quiero hacer aquí es cuando estoy de pie, ella se comió la clase en su lugar. Se comió la instancia. Quiero estar pasando por el color como parámetro. Correcto. Por lo que para cuando digas jugador nuevo y luego dentro de esos padres, puedes poner parámetros ahí dentro. Esos parámetros se pasarán al constructor aquí. Y así ves que, um, ya sabes, tenemos jugador público y ahora ponemos algunos parámetros dentro de la llamada del constructor. Y así lo que podemos hacer es ahora asignar el valor de color que se pasa en el que llamó al color y lo asignamos a este color aquí. Y luego creamos instancia de paz como hicimos en la línea anterior. De acuerdo, entonces eso es realmente útil. En realidad puedes tener múltiples constructores en una clase. Puedes tener tantos constructores como quieras. Sí necesitan tener combinaciones únicas de parámetros. Entonces aquí tenemos un constructor que no tiene parámetros. Éste toma una cuerda. Podrías tener otra que tome dos cadenas o tres cadenas o una cadena en un entero o dos enteros en una cadena o cualquier combinación. Siempre y cuando eso sea único. Este es especial. Este es el constructor predeterminado porque no toma argumentos. ¿ Y qué significa ser especial? Bueno, si no escribes ningún constructor en tu clase, el compilador agregará un constructor predeterminado para ti. Básicamente con un cuerpo vacío entre las llaves. De acuerdo, entonces sería como jugador público, rizado, corsé rizado sin nada en el interior. No obstante, si se empieza a escribir algún constructor explícitamente. Al igual que si escribes en tu código fuente algún constructor como este, um el compilador no agregará constructor predeterminado para ti. Entonces si quieres uno, entonces tienes que escribirlo. En realidad tienes que agregarla, ¿verdad? Entonces o bien no escribas ninguno, en cuyo caso obtienes uno predeterminado gratis o si vas a escribir alguno de ellos tienes que escribirlos todos, incluido el constructor predeterminado. Ahora bien, ¿por qué querrías tener múltiple ¿Cómo sería útil eso? Bueno, puedes encadenar constructores, y esto es algo realmente común que verás. Entonces, uh, esta es una forma de evitar la duplicación de abrigo. Entonces cuando llamas al constructor por defecto, tal vez quieras decir, Bueno, ¿ sabes qué? Si no pasas en un color cuando creas un jugador, solo vamos a asumir que es genial, ¿ verdad? Por lo que en el constructor predeterminado Aiken, ponga el valor predeterminado a la derecha. Como digo, quiero que este color sea gris. Pero la forma en que voy a hacer eso es llamando al constructor que en realidad toma bien el color. Entonces cuando estás dentro del constructor y tú. Escribes un método llamado que se ve así y usa este teclado esto y luego le pasas parámetros. A lo que eso dice se le llama la pretensión de que en realidad llamaron a este otro constructor con este valor. ¿ Verdad? Entonces esta afirmación aquí que dice esto realmente llama a este constructor y pasa en el valor gris, por lo que asigna mayor color y crea una nueva pieza. Y así cuando tienes muchos o ni siquiera lanzamientos estando en múltiples parámetros, eso se puede pasar al constructor y muchos de ellos tienen valores por defecto. La gente hace eso escribiendo estos constructores por defecto y el uso son estas cadenas constructoras y pasando los valores por defecto así. Muy bien, entonces ahora tenemos que volver a nuestro proyecto y empezar a sumar los constructores. Y hay instrucciones detalladas en el folleto del proyecto. Y una vez que terminemos con eso, lo siguiente que haremos son métodos. Entonces antes que nada, um, adelante y pausa el video. Aquí, ve a hacer tu proyecto, y cuando termines, lo pasaré juntos para que puedas comparar notas sobre cómo lo hiciste y cómo lo estoy haciendo y luego en la siguiente sección se meterá en los métodos . Y en ese momento, realidad podremos ejecutar la simulación, así que eso será genial. Muy bien, ojalá tengas oportunidad de hacer tu proyecto. Vamos a echar un vistazo. Entonces voy a pasar aquí a esta sección. Entonces esto fue enrollar un poco aquí, Sección C, el ejercicio constructor. Y, uh, aquí hay algunas instrucciones detalladas de cómo hacerlo. Entonces hagamos algo así. Las tarjetas tienen valor, pero ¿qué valor? Algunos de ellos uno algunos de ellos son para. Algunos de ellos son tres. Entonces vamos a dar esa responsabilidad a quien esté creando las tarjetas para decirles cuál es su valor. Entonces vamos a abrir esto bien a nuestra tarjeta, y vamos a ponerlo constructor aquí. Entonces vamos a ahorrar tarjeta pública. Recuerda, cuando escribes un constructor, usas el teclado público y el nombre de la clase, y decía que pasara el valor, así que lo vamos a decir y solo lo llamemos un valor. Ah, y dirán valor porque el valor Está bien, Así que ahora lo que tenemos ahora. No tenemos un constructor por defecto aquí, ¿verdad? Porque he escrito un constructor sin leer un valor predeterminado. Entonces cada vez que creas una tarjeta, tienes que pasar en el valor. De lo contrario, no se puede crear uno. Volvamos a la cubierta. Tenemos que crear una tarjeta. Y recuerda, solo estamos haciendo uno por ahora, así que hay un poco de hokey, pero vamos a escoger un valor. Digamos que el número tres y crear nuevos carros. Vamos a entrar en la cubierta y crearemos un constructor para la cubierta pública. Ahora este es un constructor por defecto, pero no se lo vamos a dejar al compilador porque tenemos trabajo que hacer aquí. Tenemos que hacer este derecho recrear una tarjeta con el valor. Tres. No pudimos dejar que el compilador solo genere el constructor predeterminado para nosotros porque tenemos algún trabajo específico que estamos haciendo aquí que ya sabes, el compilador de Java no entendería que se supone que cree un valor Ah, tarjeta con el valor tres. ¿ Verdad? Entonces tuve que hacerlo nosotros mismos de igual manera en una plaza y en un constructor a la plaza y la paz. Ahora la pieza obtiene dos parámetros sobre lesionado por su ubicación. Soy un entero por su número y un cuadrado. Esa es su posición o ubicación. Entonces vamos a hacer la P uh, lo siento. ¿ Eran esos cuadrados en la Paz de las Plazas? Primera Plaza Pública el. Aquí lo estamos tomando en valor, y estamos diciendo: ¿Recuerdas esos valores? Um, puedo nombrar este parámetro como quiera, pero he estado haciendo eso. Aquí hay un pequeño truco en eclipse. Hay un re factoring que puedes hacer. Voy a cambiar todos nuestros y digo, Vamos a cambiar al número Noten cómo lo está cambiando en ambos lugares. Y cuando había entrado su renombrado en ambos lugares para mí. Entonces esa es una pequeña herramienta linda. Puedes usar la paz. De acuerdo, así lo dice en un constructivo Se necesitan dos parámetros y número llamado en un cuadrado llamado posición. Entonces llamé a esta ubicación aquí. Me equivoqué. Debieron haber sido posiciones. Cambiemos esto antes de que lleguemos demasiado lejos por el camino mundial. Y pongamos en marcha este constructor. Paz pública y cómo se necesitan dos variables que int numeran y cuadran la posición y dirán recordar, llama y posición fue todo bien? Está bien. No, En el caso de los jugadores, necesitamos conocer su color y crear su paz. Entonces hay un poco de discusión, o esto en realidad es una discusión interesante. Entonces, uh, los constructores de piezas necesitan saber su número, lo cual está bien, Pero también necesitan conocer su posición para esta plaza. Entonces dice con el fin de en Stan, ella se comió la pieza. Necesitamos una plaza para pasar que el constructor en requisitos, términos que el jugador necesita saber en qué cuadrado poner su pieza al inicio del juego. Alguien fuera del jugador necesita tener este conocimiento porque claramente, los jugadores no están a cargo de las plazas. Entonces, solo agreguemos un parámetro al jugador llamado inicio cuadrado de tipo cuadrado. Por lo que esto básicamente se anuncia a otras personas. Oye, alguien necesita decirme dónde voy a empezar mis piezas, acuerdo? La paz también necesita un número ahora mismo. Sólo haremos el número uno. Correcto. Entonces vamos a hacer algo como esto. Entonces esto es un poco más complicado. Algo interesante. Y hablemos de este uso de la palabra clave esto en el en el constructor. Hablamos de eso antes en el realmente no hablábamos de eso. Entonces déjame hablarte de eso un poco aquí. Y en realidad sólo cambiemos lo que tenemos aquí. Entonces he estado llamando a estas cosas, poniendo el encendido para que no tengamos número igual número. Pero sin embargo, volver a usar mi pequeña herramienta factor re, esto es ilegal, ¿ verdad? Entonces viste que surgió y es una colisión de nombre. En realidad no es ilegal, pero es un poco curioso aquí, cierto, Hemos entrado en número aquí. Tenemos un número aquí, y luego tenemos número igual a números. ¿ Al igual que en el mundo está pasando? Uh, en general, cuando tienes múltiples variables, tenemos número aquí y tienes número aquí. El que está más cercano a ti tiene precedencia, ¿verdad? Entonces lo que estamos diciendo aquí es que sólo estamos asignando el número dos en sí, ¿ verdad? El encargo al número variable no tiene efecto, porque estamos diciendo que número es igual a número y es este número. ¿ Cómo le digo que soy eso para este? Hablo de este número, cierto. Entonces lo que puedes hacer es decir este número de punto, y eso lo califica. Aquí puedes hacer lo mismo. Esta esa posición, tal vez solo dejarla así. Esto también es legal. Um, pero cuando dices este punto lo que dice es que me estoy refiriendo a la variable. Eso es en realidad un atributo de la clase. De acuerdo, esa que está aquí arriba. No estoy hablando de ninguna variable local aquí abajo. Entonces cuando dices este punto esta es una notación especial que puedes usar en Java para referirte a los atributos que tienes aquí. Está bien, así que ahora vamos a hacer el jugador, pero para el jugador, para crear una pieza que necesitaba, necesitaba plaza inicial. Pero no conozco ningún puntaje inicial como jugador. Entonces solo voy a golpear y decir: ¿ Sabes qué? Cuando me creas, tienes que pasar en una plaza de inicio. Entonces vamos a escribirlo. A lo mejor esto tendrá algún sentido. Entonces, jugador público, necesito mi color, que es una cuerda. Y luego necesito que alguien me diga cuando me creen cuando nazca, necesito saber dónde poner mis piezas. Correcto. Por lo que este color oscuro es igual a color. Derecha y otra vez se puede ver por cierto, los colores eclipse, los colores, los colores, los colores, los colores, los nombres de las variables. Este es azul. ¿ Puedes ver eso? Eso es azul Y éste es azul y éste es marrón y ese marrón. Entonces está tratando de decírtelo. Oye, este color se refiere a este color, pero éste, porque pones este punto en el frente, realidad se refiere a ese solo tipo de interesante. Y entonces este punto paz equivale a una pieza nueva. Nos vamos a crear una pieza. Es nuestra primera pieza. Simplemente lo llamamos uno, y entonces tenemos plaza de inicio aquí. Entonces si acabas de ver que he hecho eclipse AutoCorrect para mí, lo haces presionando el espacio de control, ¿ verdad? Entonces esto es un poco de un constructo interesante aquí en nuestros constructores de jugadores. Alguien está pasando una plaza de inicio. En realidad no me aferro a la plaza de inicio. No lo asigno a ninguno de mis atributos personales. Se lo paso a mi pieza. Este tipo de un diseño interesante. No es inusual, y no es alguno. No hay nada especial en ello. Es sólo una forma diferente de hacerlo ahora. El uso de los estos puntos, no estábamos haciendo eso en el principio mientras pasábamos. Pero esto en realidad es bastante común en Java, y yo diría Personalmente, yo diría que hay un hábito bastante bueno para entrar Así podríamos volver atrás y decir el valor de las acciones Ahora podemos dejarlo así y necesitamos decir esto, ese valor porque el valor es bastante común que la gente le dé el mismo nombre porque los valores tipo de cosa incómoda decir bien. Entonces mi turno todo el dedo del pie son una vez más para hacer re factoring o renombrar Más bien, y lo cambio a este punto causa de valor Esa es una forma extremadamente común para que la gente defina sus constructores. Entonces es realmente bueno que ustedes se acostumbren a eso. Muy bien, ¿tenemos a alguien más ahora? El juego lamentable. Hablemos de lo que dice aquí. Tiene un constructor predeterminado que tiene que hacerlo. En Stan Sheet. Son tres atributos el jugador de la plaza en la baraja, los mazos fáciles. Sólo es culpa. Constructor. El cuadrado quiere tener un número y como sólo tenemos un cuadrado en este momento, uno es un buen número y el jugador quiere un color. Hagámoslo azul y quiere empezar a cuadrado. Ya que ahora solo hay una plaza, esa es la única. Tenemos que ser una plaza de inicio, así que intentemos eso. Entonces vamos al penoso juego público. Perdón juego. Este es un constructor por defecto, y vamos a decir, uh, esto no deck por supuesto deck. Eso es fácil de decir Esta plaza cuadrada. Ahora recuerda, Way Square tiene un número en Es constructor. Vamos a echarle un vistazo otra vez. Es constructor toma un entero. es lo que sucede si no pasas los parámetros aquí dice, Hey, no tienes un constructor Default Constructor Square. Necesitas agregar un *** like whoops. Sí, lo siento. Pongamos el número uno. De acuerdo, ahora ha pasado. Ahora se va la línea roja y luego el jugador porque conocía jugador y dijimos: Vamos a dar en el color azul y pasaremos en la plaza. Sí, como la plaza de inicio. Ya que solo hay una plaza, solo hay un lugar donde pueden empezar, y esa sería esa plaza en particular, acuerdo. Creo que ahora tenemos constructores por todas partes. El mazo, la carta, la baraja, la paz, el jugador, el juego y la plaza. Muy bien, Entonces en la siguiente sección, lo que haremos es mirar a agregar métodos y métodos o dónde se realiza realmente el trabajo, y al final de la siguiente sección tendrá una simulación en ejecución. 10. Métodos de objetos 06d: De acuerdo, bienvenido a la última sección de este capítulo, Sección D. Vamos a hablar de métodos al final de esta sección chap tendremos nuestra simulación cojeando. Al menos va a estar haciendo algo. Bueno, eso se ve Vamos a empezar de nuevo. De acuerdo, Bienvenido a la última sección de este capítulo sección D, sobre métodos. Entonces los métodos estaban donde está la acción, ¿verdad? Entonces en este momento hemos creado un montón de clases, así que tenemos nuestra alineación conceptual. Después ponemos algunos datos en ellos en forma de atributos, y ustedes los conocen el uno al otro. Y luego agregamos constructores para que podamos crearlos, y eso es todo genial. Pero todavía no hacen nada en realidad. Y los métodos son donde está la acción. ¿ Verdad? Entonces de lo que vamos a hacer aquí es hablar en este capítulo de la estructura de métodos y mensajes de métodos. Entonces esto es sólo un poco de oh, terminología. Entonces aquí estoy, en algún trozo de código, creo un jugador y digo, jugador punto da un giro. eso lo llamamos enviar un mensaje al jugador objeto este pequeño punto aquí dice en el lado izquierdo . Es el nombre del objeto o de la instancia, y en el lado derecho, es el nombre del mensaje. ¿ Qué hace eso? En realidad llama a un método en esa clase. lo que la instancia de jugador es una instancia de clase de jugador de tipo capital P. Por lo que en la clase de jugadores, hay un método llamado Take a Turn. Y luego habrá algún código que se ejecute. De acuerdo, entonces hablemos de Primero que nada, cómo los métodos aire escrito. El firma, que es la primera línea, tiene tres componentes diferentes a la misma. Ahí está modificador de teatro s que es público o privado. Después está el tipo de retorno, por lo que los métodos pueden devolver valores que no tienen que hacerlo. Y si no usan la palabra vacío ahí, entonces siempre hay algo en esa posición. Y entonces lo tercero es el nombre del método. Date un giro, que congestiones componen el nombre para que sea lo que quieras, y luego entre paréntesis, puede o no haber parámetros que vuelvan a pasar. Lo hermoso de la escritura y las clases de que todos los métodos de la clase pueden ver los atributos de la clase. Por lo que una clase de jugador tiene un color en una pieza. Entonces cuando dices dar un giro, puedes acceder a la paz aquí. Te estoy diciendo el movimiento de paz seis pasos y puedes imprimir el color aquí. Yo estoy imprimiendo o puedes acceder al color aquí. Lo estoy imprimiendo. Un registro de depuración, ¿verdad? Si el método en realidad sí tiene un valor de retorno, por lo que no es un vacío en la segunda posición, entonces hay que usar la palabra clave de retorno en el como última línea del método y decir, Este es el valor que voy a devolver a Quien sea llamó a este método y lo veremos un poco más de cerca en un minuto. De acuerdo, Primero, hablemos de los modificadores de acceso Ahora mismo. Estábamos hablando de público y privado. Hay algunos otros, pero estos aires, este tipo de demasiado extremos. ¿ Y qué significa público? Público significa que, um, código y otros archivos pueden ver a ese miembro de esa clase. Entonces aquí tenemos el método dar un giro siendo público, Y eso significa que si estás en un archivo de código fuente diferente, puedes decir que el punto jugador da un giro en que se compila justo bien a la derecha con privado. Entonces aquí tenemos estos, el color, el color de la cadena como atributos privados. Si estás en un archivo diferente y dices, jugador color punto, eso no va a funcionar. Compiler va a marcar eso, y eso fallará en compilar. Entonces para esto, bueno, bueno, es la posición predeterminada para la mayoría de las personas es hacer privados todos sus atributos y hacer públicos sus métodos. Y ese es un gran punto de partida. Y más adelante en la clase hablará de un poco más de sofisticación alrededor de eso. De acuerdo, Y entonces los métodos pueden tomar parámetro. Entonces si quiero decirle al jugador que mueva seis ranuras, paso ese parámetro cuando llamo al cuando envío el mensaje aquí. Y eso significa que en el método necesito declarar ese parámetro hair manager llamado pasos. Y luego dentro del código de este método, por supuesto puedo usar el valor que se pasó en, uh, uh, los pasos del parámetro. Hablamos de nuevo de la palabra clave esta. Entonces de nuevo, si quiero ser explícito sobre el hecho de que esta pieza variable es la pieza que es un atributo de esta clase, puedo poner este punto delante de ella, Uh, en este caso, porque no hay ninguna otra pieza de nombre variable que el compilador entienda si solo dices paz que es ésta. Pero poner este punto es un hace explícito que estás hablando de éste. Entonces aquí en esta pieza de punto y este color de punto aquí dentro, estoy regresando este color oscuro dependiendo del estilo realmente personal. A algunas personas les gusta usar este punto para todo, como sucede que está en este archivo aquí en esta diapositiva. Algunas personas nunca usan esto. Stott y otras personas lo usan dicen, sólo en el constructor, o solo si hay algún tipo de ambigüedad que quieren dejar claro. Es realmente una cuestión de estilo personal. Creo que usar que este punto es una especie de cotización unquote oficialmente, lo que se recomienda. Pero claro Ah, nosotros los desarrolladores somos bastante perezosos, y no nos gusta tomar esta parada todo el tiempo. Si no necesitamos hacerlo. Ahora, a veces puede ser útil que tu código sea un poco más claro. Aquí tenemos un método en la clase de jugadores llamado Lucha con algún otro jugador, correcto, así que los estamos teniendo un poco de estilo gladiador aquí, y la pelea con método simplemente imprime. Oye, mi color es leído y tu color es azul o lo que sean los colores. Por lo que ambos jugadores, tanto el actual como el llamado otro que se está pasando. Ambos tienen una variable de color. Por lo que es un poco raro en este método porque te estás refiriendo a dos diferentes, por lo que puedes decir este color de punto y otro color de punto. Derecho y color, por supuesto, es un atributo del jugador de clase. Entonces estoy dentro del reproductor de relojes. Simplemente puedo referirlo directamente, pesar de que es privado. Um, pero entonces esto dis ambigüedades de qué color estás hablando, ¿ verdad? Entonces ese es un muy buen uso de la palabra clave esta. Y como hablamos en el, uh, uh, en el ejercicio para la sección anterior, ves mucho esta notación de puntos, y constructores como este, uh, patrón que estás viendo aquí. ¿ Pasabas en un color? Y el constructor simplemente asigna eso a uno de los atributos de la clase que es extremadamente común, por lo que verás esto por todo el lugar, y en general, si vas a decir este color doc, probablemente sea bueno decir esta pieza de parada solo para hacerla paralela. Este fragmento de código no lo hizo pero es un poco molesto ver este color de punto y luego solo paz. Y entonces tal vez haya 1/3 1 1/4 1 Si vas a usar este 10.1 de ellos, probablemente uses este punto todos ellos solo para que sea más legible. De acuerdo, getters y centros airean tipos específicos de métodos que acceden a atributos Bueno, en realidad, no es necesario que los atributos de acceso, pero casi siempre dieron, um, Pero si escribes un método Andjaba que es conseguir algo y o establecer algo, ese tipo de método es algo especial, y crea lo que se conoce como una propiedad. Ahora esta idea de una propiedad proviene de unas especificaciones llamadas las Especificaciones de Java Beans . ¿ Verdad? Tipo de. Ya sabes, Java se refiere al café, y entonces hay como café, frijoles, lluvia, um, y lo que esto significaría como cuando veas cadena pública conseguir color, estás creando una propiedad llamada Color Lower Casey con el tipo de cadena, y luego el hecho de que haya un getter y un centro significa que esta propiedad se lee en este momento . ¿ De qué en el mundo estamos hablando aquí? Bueno, hay muchas herramientas y bibliotecas que trabajan en este patrón. Y hay un montón de, ah código de terceros que puedes usar ahí afuera donde dices, uh, uh, mi jugador tiene un color de propiedad y su valor es rojo y el código realmente traducirá eso a significar. De acuerdo, llame set color en el punto muerto del objeto del jugador en la cadena. Rojo. Correcto. Entonces, um, esto es algo Vas a ver mucho getters y centros o super común para el especialmente para atributos. Y, uh, puedes realmente no los necesitas a ambos como puedes tener una propiedad de solo lectura. Entonces digamos, ya sabes, para nuestro jugador, ponemos el color en el constructor, ¿ verdad? A lo mejor nunca queremos que el jugador cambie su constructor. Entonces no hay razón que brinde un centro. De hecho, eso sería mala idea proporcionar un centro porque algún otro programador algún día podría realmente establecer el color de un jugador existente, y no quieres que eso suceda. Entonces no les des derecho de centro. Y en casos realmente raros, podrías tener un derecho, única propiedad. Entonces tal vez no haya getter, pero sólo hay un centro que eso es algo inusual, pero supongo que podría suceder. De acuerdo, así que esa es la mecánica, la sintaxis de los centros. Ahora volvemos a nuestra pregunta de diseño, que es como, Bueno, ¿qué métodos? Siento los métodos. ¿ Qué métodos debemos escribir y qué métodos ir a dónde, y en realidad, esto es realmente una pregunta profunda cuando se empieza a buscar en el diseño orientado a objetos. Generalmente, debes poner métodos en las clases que tengan los datos necesarios para cumplir con el método. Esa es la especie de punto de los objetos. Hay un conjunto de patrones llamados los patrones de agarre. Es sinónimo de responsabilidad general, patrones de software de asignación. Puedes ir a buscar esos por internet. Esta frase en particular aquí se llama el patrón experto de esa lista de patrones de hierba . Uh, esto no es parte de esta clase. Es decir, realmente estamos tratando de enfocarnos en el trabajo un lenguaje, así que no vamos a entrar en esto. Pero si quieres aprender un poco más sobre el diseño, ese es un gran lugar para empezar ahora, porque esta es una especie de pregunta profunda. Vamos a pasar por las diapositivas donde van los métodos para nuestro proyecto para que antes de ir a codificar el juego, no sea una sorpresa completa ni un misterio completo. Cómo se hace esto, ¿verdad? Entonces hay un poco de um, el. Es posible que veas algo de esto en el en las diapositivas o en el, ya sabes, las siguientes diapositivas o en el en el ejercicio. Por lo que aquí tenemos dos cajas, un juego llamado juego perdón y un jugador llamado Jugador Uno. Y las casillas son representan instancias, y lo sabemos porque están bajo la etiqueta está subrayada en la UML. El rótulo me el medio subyacente. Es una instancia, ¿verdad? Vemos que están conectados por una línea y aquí hay algún tipo de cosas. Da un giro que se desliza a lo largo del cartel con la dirección de la época. Ese es un mensaje. Esto está diciendo que el juego está enviando un mensaje al jugador llamado Take a Turn. Entonces, ¿qué significa eso en el mundo? Entonces, en algún lugar del juego lamentable, no podemos decir de este pequeño fragmento, pero en algún lugar de la clase de juego lamentable, es decir jugador no tome un giro porque en realidad debería decir plato, para ser perfectamente consistente. Eso debería decir, jugador uno aquí en decir Tome un giro. Y entonces, por supuesto, sabemos que enviando un mensaje a otro, un perilla comprobado de jugador de clase va a llamar al método de tomar un giro en esa clase. Entonces esta es la sintaxis UML para enviar un lanzamiento. Uno de ellos. Hay múltiples impuestos de pecado por mostrar métodos que se llaman porque de nuevo, los métodos y mensajes son realmente así de complicados, parte de, ah, hola diseño. Entonces, cuando ejecutas una clase en Java, comienza con el método principal ¿verdad? Pero, ¿dónde debemos poner el método principal? Porque podemos especie de poner el método principal donde queramos. Y generalmente hay. Hay un par de opciones que crees que verás muy comúnmente. Una es que algunas personas crearán una clase llamada Main simplemente toe host, el método principal o la clase creativa llamada aplicación o corredor o algo así, y ponen el método principal en su o usarán algún tipo de clase de nivel superior. Entonces, como una hora un proyecto, tenemos esta clase llamada Sorry game, que es claramente como la clase grande. Ese tipo de dueño de todo y es thean desde el juego mismo. Y así podemos, sólo para nuestros propósitos. Por lo que queremos crear más clases solo pondrá la stat el método principal en el juego lamentable . Entonces, ¿qué haces en el método principal con una aplicación complicada, ya sabes, un poco más compleja aquí donde tenemos múltiples clases. Bueno, tú creas algunos objetos, y luego los haces ir, ¿verdad? Entonces, uh, otra vez, Lo siento. Juego aquí es jugar dos papeles. Una es ahí donde vamos a poner el método principal. Podría estar en cualquier lugar, pero tiene sentido ponerlo ahí. Ese es un buen lugar, Teoh. Escondalo. Y entonces el objeto del juego lamentable o la instancia del juego lamentable va a ser una especie del nivel superior , la raíz de nuestra jerarquía. Es la clase grande los grandes padres. Entonces vamos a ir a Stan. Se comió un objeto de juego lamentable y lo vamos a contar, Teoh, ir o jugar o ejecutar o correr o comenzar o, ya sabes, algún tipo de método como ese en la clase de juego lamentable. Entonces aquí en este fragmento de código, estamos creando juego lo siento, y decían Gamed out play. Está bien, eso es razonable porque ya sabes, generalmente dices que juegas un juego, así que probablemente jugar es el mejor nombre de método. Y por supuesto, eso significa en el juego lamentable en algún otro lugar de este archivo. Debido a que esta es la historia en clase, necesitarías crear un método. Coldplay. Entonces, ¿qué pasa en el método de juego? Bueno, los jugadores se turnan en rotación, y cada uno haría lo que hagan los jugadores cuando den un giro. Ahora, ahora mismo, sólo tenemos un jugador, así que hagamos que tomen cinco turnos. Y así aquí vamos. Son cuatro bucle de los que nos enteramos antes. J es el contador de bucle. Entonces vamos de 0 a 5 y decimos jugador punto dar un giro. Ah, tenga en cuenta que el nombre del método cambió de play a go aquí. Perdón por eso. Entonces, ¿qué pasa cuando el jugador da un giro? Bueno, tienes que hacer este tipo de cosas. Tienes que sacar una carta de la baraja y luego mover tu pieza por las casillas. Eso muchos en números. Correcto. Entonces en este momento sólo estamos considerando todas las cartas. Apenas movió la paz hacia adelante más tarde, haremos algunas cosas más interesantes. De acuerdo, entonces tenemos algunos problemas aquí. En primer lugar, el jugador no puede ver la baraja. No tiene visibilidad a la cubierta, derecha y bola. Entonces, ¿a quién le va bien ahora mismo? Sólo el juego lamentable tiene visibilidad a la baraja. Pero recuerda diapositiva anterior. El juego lamentable es el que le está diciendo al jugador que dé un giro. ¿ Verdad? Entonces como el juego tiene la baraja, en realidad podría pasar la baraja al jugador cuando dice dar un giro. Entonces veremos eso en la siguiente diapositiva. Cómo funciona eso. Pero lo otro es la segunda parte de los jugadores. La responsabilidad aquí también es realmente desafiante. ¿ Cómo se mueve la paz? Um, la paz conoce su propia ubicación actual, ¿verdad? Bajamos eso, y, uh, la tarjeta sabe cuántos pasos para mí, verdad? Entonces necesitamos ambas piezas de datos para completar el movimiento de la paz, y así tenemos que hacer que uno de ellos lo haga. ¿ Y cuál deberíamos tener? Hazlo. Es una buena pregunta. Entonces cuando el juego juega y dice jugador que toma tu turno, podemos pasar en la baraja. Entonces tipo de modificamos esto para decir OK, pase en la baraja aquí a los jugadores del jugador ahora tiene la baraja, y puedo robarle una carta de la baraja. Entonces vamos a poner un empate de método en la baraja y devuelve una carta. Y ahora nosotros entre la tarjeta y la paz, podemos averiguar cómo mover la paz. Y así podríamos decir tener paz, tomar el cargo y pasar la tarjeta en como parámetro o porque la tarjeta se hace cargo y pasó la pieza como parámetro. Vamos a hacer que la tarjeta se haga cargo de manera arbitraria a este paso. Sólo porque lo que vamos a hacer en capítulos posteriores será más fácil e interesante si lo hacemos de esta manera, en lugar de pasar la pieza al carrito. Por lo que una vez más, estoy usando el futuro conocimiento toe para tomar esta decisión de diseño. De acuerdo, así que acabamos de inventar el movimiento de punto de pieza embellecida, dibuja um, nuevo en la cubierta. Dibujar la tarjeta es fácil porque solo hay una tarjeta, por lo que solo la devuelves por ahora. Eso se pondrá más interesante en el próximo capítulo. Um, pero mover una pieza es raro porque solo hay un cuadrado como se supone que debes cambiar la posición de las piezas, pero , uh, no sabemos cómo hacerlo, porque hay sólo un puntaje. Entonces, por el momento, cuando le digas a la pieza que mueva un número determinado, solo vamos a imprimir. Oye, estoy en esta plaza y saca el saca el número de la plaza y solo imprime eso, acuerdo? Y luego otra vez en el siguiente capítulo, cuando teníamos múltiples plazas, bueno, bueno, en realidad, tener la pieza moviéndose alrededor. Eso va a ser mucho más bonito, está bien. Con esa introducción, es hora de ir y volver a hacer el hacer el proyecto. En el folleto de instrucciones hay instrucciones detalladas que te mostrarán exactamente qué hacer si te quedas atascado y al final de esto, el juego debería estar ejecutándolo. No es interesante otra vez, porque solo hay una pieza, una cuadrada, un jugador, una carta como si fuera algo aburrida. Pero en el próximo par de capítulos, vamos a arreglarlo y hacerlo mucho más interesante. Así que adelante y pausa el video. Ahora ve a hacer tu ejercicio y cuando termines en la última mitad de este video regresarán y trabajarán juntos el proyecto. De acuerdo, ojalá tuvieras la oportunidad de ir y hacer ese ejercicio. Echemos un vistazo. Entonces aquí está el cuaderno de ejercicios y empieza con lo que dijimos antes. Añadamos unos métodos principales del juego lamentable. Crea una instancia y dile que juegue. Está bien, así que vamos a nuestros labios. Necesidad de ir a eclipse. Entonces dijimos que vamos a poner el método principal en el juego lamentable ahora, general y de nuevo, esto es una especie de convención justa. El método principal va en la parte inferior. Por lo que público chico estático puede recordar que hablamos de este largo y no se puede ation aquí artes. De acuerdo, entonces, ¿a quién le importa todo eso? Pero lo que vamos a hacer es decir lo siento, juego, porque nuevo Juego Lo siento. Y vamos a decir juego. Dudo jugar. De acuerdo, un par de cosas sobre esto. Entonces, antes que nada, algunas personas se confunden un poco acerca de por qué estoy creando un juego lamentable dentro de la clase de juego lamentable como eso es un poco raro. Recuerda, cuando tienes un método principal, esto es um, esto es lo que se llama método estático, y aún no hemos hablado de estática, así que llegaremos a eso más adelante. Pero los métodos realmente estáticos aire como si fueran algo así como flotadores. Podrían estar casi en cualquier lugar que pudiéramos crear otro. Como dijimos en las diapositivas que podría crear otra clase aquí llamada la clase principal y poner ahí el método principal. O podría, ya sabes, ponerlo. Podría poner este método en el auto para clasificar quería. Eso me parecería extraño, pero al compilador no le importaría, ¿ verdad? Entonces, a pesar de que el método principal está dentro de la clase de juego lamentable, es una especie de separado de ella. Segunda cosa que aquí es interesante es en cuanto escribimos esto, dice el compilador. Sí, lo fastidiaste. Tiene esta línea roja aquí y decir, Sabes que lo que estás haciendo está mal. Bueno, eso es porque estamos como que estamos implementando esto de arriba hacia abajo, y así como escribimos nuestros nuevos mensajes aquí y estamos enviando el mensaje de juego a la instancia del juego , aún no hemos escrito ese método, Entonces los compiladores, ya mirando hacia adelante y diciendo Hey, no hay método de juego. Está bien, ¿qué? Vamos a hacer eso. Entonces dice Lo siento. Volvamos a esto y dice Vale, ahora necesitamos añadir un método de juego donde le digamos al jugador que dé un giro y pase en la baraja. Y hablamos de eso en las diapositivas. Ahora, uh, el juego es una instancia de Lo siento. Juego. Por lo que este es el archivo correcto para agregar el método de reproducción. Entonces hagámoslo público. Boyd juega cuando juegas un juego, ¿Qué haces? Bueno, por el momento, vamos a ver. ¿ Qué carta están usando aquí? Yo cero. Yo los bendigo. 55 giros es suficiente para nuestro juego en estos momentos. Siempre se podría hacer eso más o menos en el futuro. Y vamos a decir, Player, sólo tenemos a un jugador dar un giro, y sabemos por hablar a través del diseño que van a necesitar la baraja. Correcto. Entonces vemos que aquí decimos dar un giro. Dijeron: Sólo toma turno. De acuerdo, tomemos el barco sólo para mantenernos consistentes. De acuerdo, entonces le decimos al jugador que tome su turno, y aquí está la baraja de cartas. Entonces pasamos los autos al jugador y decimos: Vuelve a tomar tu turno. El compilador se enoja porque esto es que no tienes un método take turn en el jugador. Y sí, entiendo que aún no hemos hecho eso. ¿ De acuerdo? Entonces vayamos con el jugador y hagamos eso. Entonces vamos a sumar a tomar el método de giro. El jugador roba una carta y le dice a la pieza que se mueva. Está bien, así que hay más discusión de ello ahí dentro no solo te lo leerá, sino navaja pública da vuelta, y estamos pasando en la cubierta. Muy bien, para que no robaríamos una carta de la baraja. Ups. Cubierta del pueblo. Dios dibuja otro método que aún no hemos escrito, lo que se vuelve rojo. Y ahora quiero decirle el que necesito para mover la paz, y necesito saber la ubicación de las piezas, y necesito saber el valor de las cartas. Entonces de alguna manera necesito mezclar a esos dos tipos juntos y conseguir que hagan el trabajo por mí. Um, siempre quieres ser perezoso, Una orientación a objetos. No quiero hacer el trabajo. No quiero, como, conseguir como, la posición y el valor de la tarjeta y resolverlo por mí mismo. Yo quiero que lo hagan. Crees que eres el jefe, ¿verdad? No hace falta hacer el trabajo. Entonces, um, podemos o delegar a la pieza de fueron la tarjeta en este caso otra vez, vamos a decir, Vamos a delegar a la tarjeta porque va a hacer las piezas. Eso va a hacer que el diseño sea un poco más interesante más adelante. Entonces voy a decir tarjeta dot mover y pasar en la ficha pieza que mueve esta pieza. Y la propia tarjeta sabe hasta dónde moverla. Ahora bien, aún no tenemos un método de movimiento, así que eso es desafortunado. Y ahora también te están pidiendo aquí, pronunciemos que este jugador está tomando su turno. Y de nuevo, esto no es realmente necesario para que la cosa funcione. Pero necesitamos poner algo de salida de depuración aquí. O de lo contrario no sabremos si nuestro código está funcionando, ¿ verdad? Sí. Entonces vamos a, uh, poner el sistema de pares eso fuera. Imprimir Lynn. Ups. Um, digamos , uh, jugador realmente no importa exactamente cuál sea tu tipo aquí, pero debería ser, uh, está empezando. Es vuelta algo así. Entonces cuando sí ejecutemos el código, algo se imprimirá en la pantalla diciendo: Sí, Sí, un jugador en realidad se está moviendo. Eso es bueno. De acuerdo, um, necesitamos definir el método de movimiento en la tarjeta porque tenemos dos métodos nuevos que leen este momento. Drawling Mover. De acuerdo, uh, empate va a ser fácil, pero sigamos. Sigue las, uh, instrucciones aquí, y necesitamos definir el método de movimiento en la tarjeta. Pero sólo tenemos una plaza. No hay manera de gobernar movimiento. Entonces vamos a crear el método donde va a tener imprimir una declaración para, uh para demostrar que se llamaba correcto. Por lo que también quisiéramos imprimir la posición de las piezas y el número de las piezas y su ubicación. Pero como la paz necesita como ambas de esas informaciones, delegémoslo a la paz. Entonces en el método de cartas, vamos a decir jamón jugando una carta con este valor. Y entonces sólo voy a decirle a la paz que imprima su ubicación. ¿ Verdad? Entonces vamos a la tarjeta. Estamos haciendo cartulina arriba. Muévete pública. Boyd, Mueve bien esta pieza otra vez. En realidad no podemos hacer ninguna mudanza porque sólo hay una plaza. Es bastante aburrido, pero cuál es el juego de esa carta. De acuerdo, entonces, um, dices jugar a la carta, uh, valor. Y entonces tendremos este valor. Podrías haber dicho este valor de punto desde 12 y entonces se supone que debemos pedir a la paz imprima su ubicación una vez que hayamos terminado de mover eso eventualmente. Entre estas dos declaraciones, pondremos el código para movernos cuando tengamos más de un cuadrado con el código en para movernos. De lo contrario, decimos imprimir su ubicación, señor Piece. Bueno, la pieza quiere poner su ubicación se va a imprimir su número y el número de plazas . Correcto. Entonces vamos a decir Bien, entonces imprime ubicación en la pieza hacia arriba. Perdón. Esa no es la clase de la paz. Se trata de un público de clase pieza. Evita la ubicación del príncipe. Diga, uh, paz. Y entonces no lo haríamos a su número es labios hacer un larguero está en cuadrado. Y ahora quiero el número de cuadrados, que la plaza se llama posición. Y quiero decir conseguir número porque quiero sacar el número de la plaza e imprimir. Está buscando. No puedo decir solo número de punto de posición porque ese número es privado. Entonces lo que dice ahora ¿Está bien? Ahora tenemos más problemas, ¿verdad? Sólo lo estamos consiguiendo. Parece que estamos recibiendo más errores. No estaban haciendo ningún avance aquí, pero ahora queremos agregar un método get number a esta posición. Objeto, que es un cuadrado, como eclipses diciéndome, y eso lo vemos desde un par. Entonces vayamos a la plaza y digamos conseguir número. Esto es solo un getter como hablamos en las diapositivas, ¿ verdad? Por lo que no queremos que la gente pueda cambiar el número de la plaza. Eso sería un desastre. Pero eso lo tenemos privado. Um, tiene solo se puede establecer en el constructor, pero sí queremos que la gente sepa cuál es el número. Entonces no es malo tener un getter aquí, ¿de acuerdo? Y así ahora vimos este número rojo que dice que el método de sorteo es indefinido para el tipo deck. Entonces nos olvidamos de esa. Vayamos por aquí. Y cuando alguien roba una carta de la baraja ahora aquí por fin tenemos un valor de retorno. Cuando llame, roba en la baraja de cartas. Quiero que me devuelvan una tarjeta, derecho a robarle una tarjeta. Ahora, claro, por el momento sólo hay una tarjeta. Entonces, ¿simplemente volteamos su tarjeta? No, pero aburrido. De acuerdo, limpiamos todos nuestros errores aquí abajo. Observe si estás en los problemas para tener un eclipse que muestre donde de repente se han ido todos los errores. Teníamos algunos errores rojos, que eran errores de compilador, y teníamos algunos amarillos que decían: Oye, Oye, tienes algunas variables que definís eso. En realidad no hagas nada así. Seguro que hiciste eso, verdad? Sí, estamos bien. Está bien. Entonces ahora deberíamos poder ejecutar nuestro juego y algo debería pasar. Algo así. Y la forma en que lo haces es encontrar el método principal, que es el juego lamentable, ¿ verdad? Perdón. Clase de juego contiene el método principal, por lo que debe ser capaz de cualquier clip? ¿ Verdad? Da click en el juego lamentable. Consigue este gran menú aquí abajo. Se ejecuta como aplicación Java. Está bien. Haga clic para que se ejecute. Y si lo hicimos bien, lo vemos. Por lo que la paz uno está en la plaza un jugador azul está empezando su turno. Y al igual que, esta no es la parte superior. Lo siento. Está bien. jugador Azul empieza a girar jugando una carta de valor tres y Paz Uno termina en la casilla uno , y luego el jugador Azul hace otro turno jugando su carta de valor tres y el jugador uno está en la casilla uno. Por lo que sólo hay una plaza. Y sólo hay una tarjeta que los valores siempre tres y la paz se queda en la plaza uno. De acuerdo, vamos a arreglar eso. Pero nuestra pequeña simulación está funcionando ahora. Este tipo de salida es un poco confuso. Podemos poner algunas líneas en blanco aquí, así que digamos que volvamos al partido lamentable después de que el jugador dé un giro. Um, sigamos adelante y pongamos una línea vacía en blanco para que sea un poco fácil de ver. No, si fui a una clase, no tiene un método principal como el cuadrado. Y dije: Corre como veamos, el eclipse es como, ¿De qué estás hablando? mejor puedes Quizás puedas ir a este menú y averiguar algo. Pero porque el juego lo siento tiene un método principal, cuando digo correr ya que me da esta opción aplicaciones Java. De acuerdo, puedo ejecutar el método principal. ¿ Verdad? De acuerdo, entonces ahora hay una lista de Pinellas A. Una línea vacía línea entre cada giro. Correcto, Así que eso ayuda un poco a ver qué está pasando. Y por supuesto, podrías imprimir. Tienes el número. Oigo el contador de bucle, yo para que pudieras imprimir número de giro inicial. O supongo que estos no se giran estas rondas o algo así. Al igual que vas por la pizarra. Correcto. Por lo que alrededor del número uno, cada jugador da la vuelta al número dos. Cada jugador da un giro. Podrías imprimir ese número también. Aquí. Congenial tu salida para que se vea como quieres. De acuerdo, Pero eso termina el Capítulo seis sobre objetos, clases, métodos constructores, atributos. Y ahora tenemos un programa de trabajo que consta de seis clases diferentes en un objeto durante el programa. Entonces felicitaciones. De verdad estamos empezando a meternos en ello. 11. 07 Arrays: Bienvenidos al Capítulo siete un aumento. Aquí es donde nos ocupamos de más de una instancia a la vez. Por lo que hasta ahora, nuestro juego es un poco aburrido porque sólo tenemos un cuadrado, una pieza, un jugador. No tendremos más de uno. Entonces echemos un vistazo a una de las primeras soluciones ofertas de trabajo para esto, que son los rayos, que básicamente son grupos de objetos. Cómo crearlos, cómo acceder a ellos. Entonces, por ejemplo, sólo hemos tenido una instancia de un tipo particular. Por ejemplo, sólo teníamos un jugador. Y ahora digamos que queremos más de un jugador para que puedas hacer tu primer intento como este y decir, Jugador uno a jugador tres Y podrías ser capaz de salirte con la suya para los jugadores. Pero eso podría ser un poco más difícil para algo como las plazas, porque hay 60 de ellas. Y escribiendo cuadrado cero, un cuadrado hasta el cuadrado 60 podría ser, uh, uh, especie de Ah, no una tarea agradable. Y también podría faltar uno y luego, pero plantea la pregunta de qué si hubiera 600 como, De verdad te vas a sentar ahí y teclear 600. Tiene que haber una mejor manera. Introduzca las matrices, por lo que una matriz es un tipo diferente de objeto, por lo que también es un objeto. Eso básicamente sostiene un conjunto de referencias a otros objetos. Entonces lo que ves en la parte superior aquí es una variedad de jugadores. Parece que tiene cuatro ranuras, y está sosteniendo referencias a otros cuatro objetos de jugador. Jugador un jugador a jugador, tres jugador para en la celebración de todas las referencias dentro de un objeto. Entonces ve cómo se ve eso, así que el sello distintivo de un raise y java son los corchetes. Entonces cuando estás declarando una matriz, como en la primera línea aquí dices jugador corchete cuadrado, corchete cuadrado. Y eso es rojo como una nueva matriz de jugadores, derecha o una matriz de jugadores, quieras pararte, y luego el nombre de ese objeto se llama jugadores. Entonces cuando declaras un aumento, tu siempre usando los corchetes y luego un aire de subida también objetos igual que jugadores o cartas o algo por el estilo, y así necesitas crearlos con el nuevo operador. Entonces aquí se ve nuevo jugador, pero en lugar de la ronda de padres como normalmente se tiene. Cuando estás creando un objeto, un aumento, un aumento, toma los corchetes y dentro de los corchetes de partitura, necesitas poner un generador de imágenes, que diga el tamaño de la lluvia. Por lo que el tamaño del rayo tiene que ser conocido en el momento en que se crea la matriz y su inmutable, no se puede cambiar después de eso. Esto es, nos enteraremos más adelante es uno de los mayores inconvenientes de una pasa en el próximo capítulo arreglará ese problema también. Ahora una de las propiedades más interesantes que vienen con los Rayos. Cada matriz tiene una longitud de culto a la propiedad, que es una propiedad de solo lectura que dice lo que mide. Entonces si estamos ejecutando este código que tenemos aquí y decimos jugadores igual a nuevo jugador para y luego más adelante, decimos imprimir jugadores a lo largo que va a imprimir para ¿Cómo accedes a un aumento? Bueno, entonces en primera línea está la forma estándar de crear una matriz. Ahora tenemos cuatro ranuras para jugadores en nuestro rayo que hemos creado, y ahora en el segundo Legado, jugadores de cero iguala a nuevo jugador, por lo que el número en este punto dentro de los corchetes. eso se le llama el índice de la Array. Algo que hay que notar aquí es que, sí, los Rayos están indexados a partir de cero. Entonces para una matriz de longitud para, como esta matriz de jugadores, los números de índice de boletas van 0123 Así que va de cero a una longitud menos uno. Podrás pensar que eso es desafortunado. Creo que eso también es desafortunado. Esto es parte del trabajo es linaje proveniente del lenguaje de programación del lenguaje C y luego ver , hay un montón de razones realmente buenas por las que se levanta debe comenzar en cero. Pero esas razones han desaparecido en Java, pero nos queda con el legado de cero offset de distancia. Entonces sólo algo a lo que acostumbrarse, que ese barco ha navegado en este punto. Eso no, creé un jugador y lo he agregado a la lluvia. ¿ Y si lo quiero de vuelta más tarde para poder hablar con ese jugador? Se puede acceder a los elementos de la matriz de la misma manera que los asignó. Entonces aquí se ve, en la tercera línea, se ven jugadores de cero. Decimos Jugador P iguala a los jugadores un cero y ahora p puntos del mismo objeto que estaba en jugadores de cero. Ahora una de las otras cosas que tienes en una matriz es que no todos los valores de índice están permitidos. ¿ Verdad? Por lo que esta es una matriz de jugadores de tamaño cuatro. Por lo que se permiten 0123. ¿ Qué pasa si dices que jugadores de seis son iguales a nuevo jugador? Bueno, lo que pasa es esto. Esto se compila muy bien, pero cuando lo ejecuta en tiempo de ejecución, esto arrojará una excepción en el índice Array fuera de límites excepción. Ahora, realmente no hemos hablado de excepciones todavía, pero este es el trabajo su forma de señalarte que algo salió mal. El hecho de que Java verifique los índices de matriz en tiempo de ejecución y asegúrese de que no pueda sobrepasar los límites que establece en realidad es algo realmente bueno. Este tipo de bichos de desbordamiento ah ray fueron una enorme fuente de los ataques de hackeo en programas que fueron escritos y C plus, donde en realidad se pueden hacer jugadores de seis y se correrá muy bien. Básicamente, si dejas que las matrices el índice re corran sobre la longitud de la matriz, entonces tienes algún acceso casi aleatorio a la memoria de la computadora, y puedes hacer mucho daño. Entonces cuando esto cuando se acabó el trabajo y dijeron, Vamos a atarse, checa el aumento de Ola en tiempo de ejecución. Y si pones un mal índice ahí dentro, va a lanzar una excepción que realmente fue anunciada como una gran cosa. De acuerdo, otra vez, solo para conducir este punto a casa. Cuando creas una matriz, no crea los elementos, ¿ verdad? Entonces cuando dices, uh, uh, array de jugadores es igual a nuevo jugador de cuatro, obtienes una matriz con cuatro ranuras, pero todavía no hay jugadores en ella. Está construido para dar cabida a jugadores. Puedes meter jugadores en ella, pero aún no hay jugadores. Es como poner una mesa con cuatro ajustes de lugar. Eso es genial, pero aún no hay gente ahí. Necesitas que la gente venga a sentarse. solo poner las sillas ahí no crea a la gente eso en la mitad baja. Ya ves aquí es cómo crearías a los jugadores y llenarías la matriz. Tienes tu terminado tu I de 0 a 4 y esta es sintaxis muy común para loop I igual a cero. Yo menos de cuatro yo más. Y entonces dices, Jugador de I es igual a nuevos jugadores nunca creados para nuevos jugadores y los asignó a las ranuras . +0123 Dentro de la matriz, esta sintaxis para un aumento puede variar un poco. El que está en la línea superior es el que te he estado mostrando. Creo que eso es una especie de lo más intuitivo. Pero se puede. Cuando declaras una matriz, en realidad puedes poner los corchetes junto al nombre de la variable. Realmente no me gusta este porque parece las variables y lastiman, y hay que mirar aquí para ver, como un peso. Es una imagen o un rayo, así que realmente no me importa esto. Otra cosa interesante que puedes hacer cuando declaras un aumento puedes. Si ya conoces los valores, solo puedes escribirlos en el interior de llaves. Por lo que nuevo interés en este caso no necesitas dar índice porque Java mirará lo que hay dentro de estas llaves y va OK, mira, mira, hay 123 por lo que esto creará un interino A de talla tres para ti y pre llenarlo con el valores a 34 5 Y de hecho, incluso se puede ir más allá de dejar fuera la nueva pista. Aquí. Es una llamada de constructor implícita que dices en números es igual a Curly Brace a 34 5 que crea la misma, uh, estructura que esta por encima de ella. Por lo que verás de vez en cuando estos diferentes tipos de impuestos por el pecado. Ya sabes, en general, los programadores van a preferir el más corto, mayoría de los turistas en impuestos. Pero una cosa que hemos tocado un poco en el cabello y queremos llamar explícitamente es que un aumento puede contener tipos de objetos como los jugadores. Ya sabes, diferentes clases que has escrito, o pueden contener tipos primitivos como son picaduras. Dobles, largos, tipo de los tipos primitivos que se incorporan en la máquina virtual Java. De acuerdo, así que eso es bastante sencillo. Mira un aumento, pero nuestro proyecto va a ser un poco más complejo. Entonces lo primero que vamos a ver es actualizar nuestro conocimiento de plazas. Entonces ahora mismo tenemos una plaza, pero sabemos que son 60 de ellos. El cuadrado, El número de puntuaciones nunca cambia. Los puntajes siempre estuvieron en el mismo orden. No se mueven en esto en la pizarra ni nada. Por lo que es un candidato bastante bueno para usar una matriz, así que tendremos que crear 60 cuadrados harán que una matriz de 60 pase y los llene todos en el bucle. Y la primera plaza llamará derecha a la plaza de salida. Y acabaremos de empezar a los jugadores en esa plaza. Y ahora en realidad deberíamos poder mover nuestras piezas alrededor del tablero. Cuando tiramos de la tarjeta, deberíamos poder movernos. Tenía tres ranuras. Um pero ¿cómo funcionó exactamente eso? Correcto. Entonces sabemos que la paz conoce su propia ubicación. Eso es una plaza. Entonces sabe que vale la pena sentarse. Se roba una tarjeta que dice tres pasos, y ahora tenemos que avanzar tres pasos. Y si recuerdas, le dimos la responsabilidad de mover la paz al auto porque el auto para tener el número de plazas para realmente ser movido, pero la tarjeta no sabe qué es la plaza. Tres pasos adelante. Entonces, ¿cómo vamos a hacer eso? Hay muchas maneras en que podrías resolver este problema, pero vamos a prepararnos para una. Eso es una especie de uso muy elegante de la orientación de objetos. Entonces lo que vamos a decir es que cada plaza conoce su plaza vecina la siguiente. Entonces, al igual que el cuadrado número uno, sabe que es seguido por el cuadrado número dos. Y tiene una referencia a esa siguiente plaza. Y ahora si estoy en la plaza número uno y digo, Hey, necesito mudarme. ¿ A dónde voy después? La plaza te lo puede decir. Ah, aquí está el marcador número dos. Y luego cuando estoy en la plaza número dos, puedo decir, OK, ¿ ahora dónde? Cuadrado número tres y me va a llevar a lo largo de la, um toma muévame a lo largo de la pizarra así. Entonces vamos a ir a nuestro laboratorio ahora y convertir cuadrados en una matriz. Esto es un poco más complejo de una lección de lo que hemos hecho antes. Ah, son ejercicio complejo. Así que asegúrate de leer las indicaciones que vienen con el laboratorio. Cae eso y cuando estés listo, sigue adelante y pausa la grabación de video ahora mismo y da el ejercicio de try. Cuando termines, puedes volver a empezar el video y lo haremos todo juntos, está bien. Espero que puedas superar bastante bien ese ejercicio. Vamos a echar un vistazo. Entonces, primer lugar, en primer lugar, veamos aquí las instrucciones de ejercicio, y habla un poco sobre el reto de diseño y cómo lo vamos a hacer. Y espero que leas eso. Esperar que todo tenga sentido comente al respecto a medida que pasemos. Um, entonces vamos a hacer lo de crear cuadrados y dice, Primero que las clases cuadradas ahora van a tener este nuevo campo llamado siguiente cuadrado de tipo cuadrado con el getter en un centro. Entonces vamos a buscar la clase cuadrada. Desechado eso Así que no es distraer. Muy bien, entonces tenemos unos nuevos atributos. Hazme saber cómo hacer atributos. Ya hemos hecho esto antes. Plaza privada, siguiente plaza. De acuerdo, entonces esto puede parecer un poco extraño para ti que un cuadrado tenga un atributo de también un cuadrado, pero en realidad es un paradigma muy útil, orientado a objetos. Get Me gusta mucho usar esta forma de moverme por el tablero porque realmente te hace pensar en objetos y en cómo se relacionan entre sí. Ahora decían. Queremos meterla en el centro siendo una programadora perezosa. Voy a usar los clips para hacer eso. Y voy a decir código fuente, y dice generar getters y centros y solo quiero hacer la siguiente plaza. Así que pon esos ahí abajo y boom. Ahora tenemos consiguiendo lo siguiente. Claro que a continuación, donde no los puso exactamente donde esperaba para mí. Me gusta tener al constructor en la parte superior. Yo iba a la construcción de nuevo arriba. Ahí es donde. Esperen encontrarlo. Está bien, genial. Ahora, lo siguiente es el suyo. Acude a la clase de juego lo siento. Cambia el cuadrado de nombre de campo de un cuadrado a un array de cuadrados, y luego vamos a mover la creación de las partituras, porque es un poco de lío a un método llamado crear cuadrados. Entonces es hacer esas dos cosas. Entonces en lugar de una plaza aquí, vamos a tener en cada una de las plazas. Recuerda, eso significa llaves. En lugar de llamarlo cuadrado, voy a llamarlo Dónde está, uh, eso tiene un poco más de sentido. Y dijimos que vamos a hacer todo este trabajo en un método llamado método privado llamado crear cuadrados. De acuerdo, entonces , um, estamos hablando un poco más después. Qué métodos privados son miembro evitar significa que este método no va a devolver nada . Se va a hacer algún trabajo, pero no hay valor de retorno regresando. Aviso que tenemos un compilador ahora mismo. Volveremos a eso un poco más tarde, acuerdo? En la realidad, te piden que arregles eso de inmediato. Entonces vamos a reemplazar la creación del cuadrado único y en su lugar llamemos a crear cuadrados. Entonces toma toda la celda y di crear cuadrados. Ahí vamos el camino, si eres nuevo para eclipsar de nuevo la forma en que hice el ese auto pequeño completo fue por un espacio de control . De acuerdo, entonces en el método Cuadrados de la caja, vamos a crear una matriz de 60 para cada y siguiente vamos a crear un cuadrado y asignarlo a la siguiente. Y luego tendremos que volver a recorrer y establecer la siguiente propiedad cuadrada. Entonces vamos a aguantar. No hagamos demasiado a la vez. Entonces primero vamos a asignar a los cuadrados variables, que es que se podría decir este punto cuadrados, si quieres usar esto para todo. Nueva matriz cuadrada de tamaño 16. De acuerdo, ahora segundo paso loop over de 0 a 59 agregar en la plaza. Enseñar uno. Entonces, solo pongamos una nota. Cabello, labios, sustanciados. Cuadrados escribe un 4.0 por menos de cero. Yo podría hacer esto. Genial. Yo plus plus. Y entonces voy a hacer esto. No obstante, nos estamos metiendo en lo que llamamos números mágicos aquí. Entonces es mejor que este número 60 y este número 60 sean lo mismo, o vas a terminar con bichos o choques en tu programa, ¿ verdad? Tan verdaderamente Brad programación Celtic Teoh duplican números como este a lo largo de tu código. Eso es como, Bueno, estos tendrán que ser 60. Todo el mundo necesita saber que algún día alguien podría entrar a este método y empezar a jugar con él y no darse cuenta de que si cambian, estamos usando 65 ahora. Claro, eso está bien. Hacen esto y olvidan que no ven que hay otros 60 aquí abajo. Podrían no esperar eso. Y ahora tienes una gran reunión, Esta pesadilla. Entonces hay un par de formas de resolver esto. Podríamos crear una variable aquí, atendió tu llamado número de plazas y asignarla a 60 o si queremos ejercitar nuestra plaza. Lo siento. Nuestra carrera y impuestos poco que aprendimos en las diapositivas. Hagámoslo. Repuestos. Uh, como, recuerda, Sabemos que una vez que has creado cuadrados, entonces tiene la como una propiedad de longitud. Este número 60. Si cambio este número, este número cambia. ¿ Verdad? Entonces esta es una forma muy segura de hacer esto. El largo variable no se puede cambiar en ninguna de ella. Entonces decimos plazas. Ahora, ¿qué índice también firmarás? Bueno, los ojos variables asumiendo todos los valores de 0 a 59. Entonces ese es el siguiente que ganamos. Y decimos nuevas plazas cuadradas, ¿recuerdas? Yo quiero saber su número porque les gusta imprimir. Estoy en la plaza 12 o algo así. El jugador. Por lo que pasamos en los anexos Welker. De acuerdo, Ahora la otra cosa plazas que todo necesita es su siguiente plaza. Ahora se podría pensar y esto fue discutido en el en las instrucciones para el laboratorio. A lo mejor deberíamos agregar eso al constructor de la plaza y decir cuadrado necesita ser pasado en su siguiente plaza. Pero porque las plazas se airen en un bucle. No se puede hacer eso. En otras palabras, con el fin de acariciar como para cuadrado uno el siguiente ¿Dónde va a ser cuadrado para verlo para crear cuadrado a antes de crear uno cuadrado o de lo contrario no puedes pasarlo bien? Eventualmente se llega al final del al forro, se dice, Oh, cuadrado 60 o yo cuadrado 59 el siguiente cuadrado cero. Por lo que tengo que crear puntuación cero antes de crear cuadrado 59. Y, Ellen, estoy en un bucle. No puedo hacerlo. Entonces tenemos que hacerlo de dos maneras para bucles aquí. Por lo que estamos parados para conseguir la plaza. Ahora vamos a decir, listo para ser próxima propiedad cuadrada. Entonces, empecemos a bucear por igual cero. Parecía menos que, uh, lo que vamos a encontrar cuando lleguemos al final. Plazas para el cabello, pinzas de enlace. De acuerdo, me olvidé de lo sé que falta algo aquí. Seguro que ustedes vieron que estaba teniendo problemas para recogerlo. Está bien. Ahora bien, ¿ podemos hacer todo esto en un solo bucle? Vamos a probar esto. Podemos empezar con esto y decimos: Vale, Vale, así que quiero. Empecemos con cero cuadrado. Hola. Igual a cero. Está bien. Y así dirá, um, um, cuadrado, Llamémoslo el cuadrado actual es igual a cuadrados. Cero. Entonces ahora estamos usando los rayos ups. Perdón, mi cama. Puntuaciones de I ahora elevando la notación de acceso de rayos El siguiente cuadrado tras cuadrado I Está lleno de siguiente plaza. Ponme llamar, yo más qué? Está bien. Y así ahora queremos decir Y así, por ejemplo, cuando yo igual a cero, tenemos cuadrados Kurt. Puntuación cero. Siguiente cuadrados cuadrados uno. Y queremos decir actual al cuadrado. De inicio al lado de la plaza a la siguiente, Se podría decir, ¿eh? Problema resuelto. ¿ Ves el problema aquí? Está bien. Voy a ir de un valor de 0 a 59. Justo cuando sea igual a 59 serán casillas sacadas de 59 entonces estaremos buscando cuadrados de 60. Pero aquí no hay 60. ¿ Verdad? Si ejecuta este código, obtendrá ese temido índice de matriz fuera de límites excepción. Y puedes probarlo y ver si lo crees, a ver si te pasa eso. Pero te estoy asegurando bien para que en realidad podamos ir por esto? Tenemos que parar uno antes. Está bien, entonces voy a poner uno menos ahí. Entonces ahora voy a ir de 0 a 58 ¿verdad? Y así, uh, eso deja la plaza 59 sin su siguiente plaza. De acuerdo, así que en realidad vamos a tener que manejarlo a mano. Así dicen plazas de ahora, queremos conseguir el número 59. Si tipo 59 hereda más números mágicos porque tiene que ser uno menos que éste. ¿ Verdad? Entonces, ¿qué? Yo en cambio, voy a hacer cuadrados de esa longitud menos uno. De acuerdo, ahora puedo hacer esto. Podría negarse. Entonces plazas de 59 que es lo que eso es. Expresión de valores a Eso es un cuadrado, así que en realidad puedo llamar a métodos directamente en el cuadrado. A mí me gusta aparecer. Sacamos los cuadrados de la matriz y los asignamos a una variable local. En realidad ni siquiera necesitamos hacer eso. Veamos mucho este ascenso siguiente plaza y sabemos que al siguiente donde para la plaza 59 es cuadrado cero. Correcto. Entonces decimos cuadrados de cero. De acuerdo, es conseguir esas sintaxis resaltando manera. Está bien. Espero que eso tenga sentido para ti. Esto es un poco de ah, ya sabes, requiere un poco de pensamiento aquí para seguir este código. Y lo pasé bastante rápido. Pero tal vez quieras mirarlo si tú Si aún no lo consigues, puedes agregar algunas declaraciones de depuración. Recuerda, cada cuadrado tiene un número asociado a él, y puedes obtener el número de cuadrados diciendo: ¿Cómo se llama? Obtener, uh, echar un vistazo. Consigue número en la plaza. Está bien. Y luego puedes poner algunas declaraciones impresas aquí y decir, uh, cuadrado actual es igual a cuadrado de get number, cuadrado derecho que obtiene número. Pero esto configurará tus casillas para el correcto funcionamiento del juego donde cada plaza conoce de su próximo número. Ahora todavía tenemos una compilación por aquí. Ve a este pequeñito rojo aquí y dice: Vale, Vale, necesitamos a diputado. El jugador también necesita esa plaza inicial. Entonces por el momento, tomemos nuestras plazas y digamos que anotar cero es los arranques donde para todos los jugadores este momento, solo hay un jugador. El siguiente capítulo tendrá múltiples jugadores, um, para nuestra versión de lo siento, podemos tener que todos comiencen en la misma plaza, o puedes ser un poco más elaborado y empezar entre diferentes plazas. En realidad no importa. Muy bien ahora eso es sólo la mitad del trabajo después de todo eso. Un poco de gimnasia mental ahora necesitamos mover la paz. lo que finalmente llegamos a mover la paz. Recuerda, dijimos que lo haremos. Ya asignamos esa responsabilidad a la tarjeta. Y de nuevo, eso puede parecer un poco contraintuitivo ahora mismo, pero a medida que avanzamos en el proyecto, verás que hay una razón para hacer eso. Por lo que primero necesitas conseguirla y centrarte para la ubicación de la clase de paz. Ahora bien, ¿no arreglamos uno de esos antes? Echemos un vistazo. Nosotros no lo hicimos. Entonces sí tenemos una, uh, posición. Lo llamaron aquí. Ubicación parece que a veces se llama localizaciones. A veces posicionarse. Pero hagamos eso que hicimos antes y digamos, uh, fuente. Generar getters y centros y pongámoslo en último lugar. A mí me gustan mis getters y centros abajo en la parte inferior. De acuerdo, ahí vamos. Por lo que ahora tenemos una posición get en la posición establecida abajo por abajo. Bien. Por lo que la tarjeta necesita saber dónde está esa la plaza. Por lo que para la tarjeta, lo hacemos preguntando las piezas ubicación actual para la red para su de las ubicaciones actuales . Dónde para la siguiente plaza. Entonces veamos qué significa eso. Entonces aquí estamos en la tarjeta. No estamos haciendo nada bien en este momento. Entonces, ¿qué tenemos que hacer para hacer esta mudanza? Recuerda la forma en que lo vamos a hacer para decir inicio cuadrado, ubicación es igual a pieza que consigue posición, tal vez debería llamarla posiciones de inicio. Esa nomenclatura es una posición similar. OK? Y ahora, sea cual sea el valor de esta tarjeta, es un entero cada vez que vamos a decir algo como esto. Vamos antes que la gente cero yo menos que este valor de acciones más plus. Entonces otra vez, sólo estamos haciendo un bucle. Al igual que si el valor es tres, vamos +123 veces eso, voy a asumir el valor +012 Realmente no nos importa cuáles son los valores. Y luego diremos: ver, A lo mejor no deberíamos. A lo mejor deberíamos llamar a esta posición tiempo y mover una plaza. Lo que vamos a decir es uh, la posición es igual a posición. Tienes sacando X cuadrado, ¿verdad? Entonces estoy usando la misma variable aquí. A lo mejor eso es un poco confuso. Y puedo decir, um bueno, creo que sólo va a hacer que hasta Justus sea confuso si lo hago más. Pero así empezamos con la plaza. Esa es la posición que la posición que las piezas en entonces decimos, Dame tu siguiente plaza y tomamos esa plaza y la asignamos de nuevo a la posición. Derecha variable. Hacemos eso varias veces, y luego cuando terminemos, tenemos que informar la pieza. No le hemos dicho a la pieza que tiene una nueva posición, así que eso lo volverá a hacer bien. Esto un poco. Nos estamos metiendo un poco más en la orientación del objeto. Tenemos la única posición variable y llenamos esa variable primero con la posición actual de la paz. Y luego pasamos por este bucle. Pero decimos: OK, OK, déjame preguntarle esa plaza. Dame tu siguiente plaza y yo uso eso. Y sustituí el valor de la posición por eso. Siguiente donde y luego hacer eso otra vez y lo hago otra vez para que me pase por la pizarra tres veces. Está bien, vamos a revisar nuestros problemas. Consejo. No hay problemas. Entonces lo que eso me dice es que si trato de correr el juego, veamos si esto funciona. De acuerdo, leámoslo del mejor jugador. Azul está iniciando su turno jugando a la carta de valor. Tres pieza uno está ahora en la plaza número tres. Está bien. jugador Blue vuelve a iniciar su turno. Recuerda, todavía hay un solo jugador jugando al valor concedido. Tres. Recuerda ahí todavía, solo una tarjeta tiene valor tres, y ahora está en la plaza seis y luego es en la noche cuadrada, y luego está en la plaza 12. Entonces, ¿ desde dónde? 15. ¿ Verdad? Mantuvimos el juego en cinco vueltas, pero ahora se pueden ver las piezas realmente moviéndose alrededor del tablero. Es aterrizar en diferentes plazas, bien, así que espero que todo tenga sentido para ti. Vamos a resumir lo que tenemos aquí, así que aprendimos sobre un aumento. En este capítulo. Un raise puede contener múltiples variables del mismo tipo por lo que podría ser valores primitivos o valores objeto. Podrías tener una matriz de imagers o una matriz de cuadrados, una matriz de jugadores muy útil. Entonces si queremos volver a mirar nuestro proyecto, volvamos al lamentable juego aquí y miremos. Tenemos 60 cuadrados, pero solo los hacemos un seguimiento con una variable aquí, ¿no? Son solo plazas. No consiguió la ayuda como Plaza cero cuadrado uno a cuadrado tres, lo que sería una verdadera pesadilla. Y hay un poco de Ah kung fu involucrado aquí y configurar el cuadrado que significa simplemente llenar la matriz era simple, ¿ verdad? Esto es como código simple muerto aquí, estableciendo la siguiente propiedad cuadrada, esta idea que las plazas se conocen entre sí. Es un poco torcer tu mente un poco difícil envolver tu cabeza alrededor, pero en realidad es bastante sencillo. Nosotros los hacemos todos. Tomamos el trato la última plaza como un caso especial para que no lo hagamos No detenemos el siguiente temprano, y luego tratamos la última plaza como un caso especial, pero levantas un realmente útil ahora. El gran problema con los Rayos es que el tamaño debe ser conocido y declarado cuando se crea la matriz y no se puede cambiar. Por lo que en el próximo capítulo se verá otra estructura de datos que contiene múltiples valores de ah , tipo dado. Y resuelve muchos de los problemas que tenemos con el aumento, la incapacidad de hacerlos cada vez más grandes en tiempo de ejecución. Muy bien, nos vemos en el próximo capítulo. 12. 08 collecciones: Muy bien, bienvenidos a las colecciones del Capítulo ocho. Otra forma de hacer Mandos de instancias. Por lo que un aumento, nuestro super conveniente. Pero sí tienen algunos problemas, ¿verdad? En primer lugar, esto en impuestos. Un poco incómodo, como todos esos corchetes y llaves y cosas un poco raras. Y el grande, por supuesto, es que necesitas saber el tamaño cuando creas la matriz y no puedes cambiarla una vez que se haya creado. Entonces ese es en realidad un problema realmente grande. Uh, así que Java tiene un marco llamado la colección Spring work, que resuelve estos problemas. En este capítulo hay un montón de diferentes tipos de colecciones se verá la más común, que es la lista. Entonces cuando miras esto y miras el lado izquierdo y dices que no tengo array de cuatro jugadores y luego aparece el quinto jugador, ¿qué hago? Bueno, no puedo agregar 1/5 jugador a una matriz de cuatro jugadores. Voy a tener que crear uno nuevo. ¿ Estaría bien si se arregla a eso mismo? Al igual que cuando tratabas de agregar 1/5 jugador, lo verías, como aquí en el lado derecho. Simplemente me gustaría, tal vez duplica su tamaño y, ya sabes, agrega un jugador ese jugador cinco a la ranura número cinco. Y entonces no tendría que preocuparme. Yo quiero lidiar con todo este lío. Bueno, eso es exactamente lo que son las colecciones. Entonces colecciones. Hay un marco de colección completo en Java, y caen en varios tipos diferentes. Una son las listas. Esos son un tipo de colección que conserva el orden. Entonces recuerda cómo Honore tienes los índices como 01234 y puedes acceder a los cuadrados estatales en la matriz por su índice, lo que menos trabajan mucho de la misma manera que las cosas se pusieron en cierto orden, y mantienen su orden. Un conjunto es un tipo de colección que no tiene un pedido, pero tiene una propiedad diferente y en la que no se pueden poner duplicados. Entonces si le agregas, uh, ya sabes número veinte a ella, echará el 2do 1 fuera. Y luego hay un tipo diferente de colección llamada mapas, que es una tienda de valor clave en un poco diferente bestia a la lista en el sentido. Pero empecemos con listas porque esa es probablemente la más común. Y básicamente se puede pensar en una colección como, ah, objeto que simplemente envuelve a Honore y lo maneja cuando se llena. Crea uno nuevo con un tamaño más grande y copia los datos en el nuevo ARY. Entonces así es como usas la lista. Entonces, en primer lugar, digamos que queremos crear A en lugar de una matriz de jugadores, queremos crear una lista de jugadores. De acuerdo, la sintaxis aquí se vuelve un poco confusa porque hay cosas de las que aún no hemos hablado , pero usamos el tipo aquí lista y luego tenemos este reproductor de corchetes angulares. Entonces de esa manera lees. Esta es una lista de jugadores. Estos corchetes angulares denotan lo que llaman una interfaz genérica, y aún no hemos hablado de genéricos, por lo que eso surgirá un poco más adelante en el curso. Um, y luego dices Nueva lista de array de jugador otra vez. Se puede decir que esto es ah, sin lluvia que sostiene a los jugadores. Pero espera, ¿por qué está lista aquí? Y aquí un realista ¿no es tan extraño? Bueno, esto tiene que ir con la lista es la interfaz. Una lista de array es el tipo concreto. Eso probablemente no tenga ningún sentido para usted todavía, pero vamos a estar hablando de eso sólo en unos capítulos a partir de ahora mirando las interfaces y cómo funciona esto. Pero esta es la forma adecuada de declarar una lista de jugadores, así que hagámoslo de esta manera y, bueno, mira, examinaremos esta sintaxis a medida que pasemos. Entonces si quieres agregar un nuevo jugador a una lista, ¿cómo lo haces? ¿ Tú? Hay un método de anuncio al que llamas y creas un nuevo jugador. Está bien, puedes. Eso sólo agregará al jugador al final de la lista. Y si quieres poner al jugador en un índice específico como lo haces en una matriz, entonces podrías decir Usa el método set y ves a los jugadores que se establecen. Y en el siguiente Número dos, aquí hay un nuevo objeto de jugador para poner ahí. Si quieres conseguir un jugador en un determinado índice, puedes decir Métete en ellos. Pasando ese índice imager ahí, y devolverá al jugador por lo que el primer jugador estaría en el índice cero. Correcto. El segundo jugador lo será en el próximo. Se trata de Sarah, así que sigue siendo un paradigma de matriz de cero offset índice de desplazamiento cero. Al igual que una navaja Ahora, normalmente, cuando estás usando listas, lo general no pasas por usar el método get y pasando imágenes como lo haces en una matriz. Hay formas más elegantes de lidiar con ello. Entonces digamos aquí que tenemos una lista de jugadores y es una matriz menos de lo que hemos agregado. Algunos jugadores, Um, y queremos pasar ahora a cada jugador en orden y decirles que tomen su turno a derecha. Hay una sintaxis para aquello que se ve así para un jugador de jugadores en jugadores. Por lo que el colon es rojo está en jugador. Toma tu turno. Entonces esto es una especie de atajo para este tipo de cuatro bucles en texto que hemos estado usando con los Rayos. Y de nuevo define a su jugador variable local. Entonces este jugador y este jugador de la misma variable derecha, y eso sale de la lista jugadores y el colon básicamente le dice al compilador. De acuerdo, quiero que iteren a través de esta lista de jugadores, vayan de cero a fin de la lista y me las den una de las veces pasadas a este bucle, ¿ verdad? Algo que no se llama aquí, que en realidad es interesante notar en Java. Una vez que has dicho que esta es una lista de jugadores, no necesitas poner al jugador de nombres dentro de los corchetes angulares. Cuando tú en Stan, ella se comió la lista de matriz. De acuerdo, puedes si quieres, pero eso es generalmente La gente no hace eso porque es solo mucho mecanografiar, de acuerdo, así que podrías hacerlo de la vieja manera. Y eso es como, Ok, uh, es una tasa para mi igual cero al tamaño del jugador. Por lo que en una lista de elementos, el método para obtener el tamaño de la lista se llama Tamaño versus Honore, donde se llama longitud. Entonces eso es un poco desafortunado que Java escogiera diferentes palabras para obtener la longitud de los diferentes tipos de tamaños de colección. Pero así es como es, así que podrías escribir un bucle for donde voy de cero a tamaño, y luego podrías conseguir a los jugadores que indexan yo y decirle que dé un giro así. Pero creo que ves que esta sintaxis aquí es un poco más elegante, menos prolijo. Vamos a dar un paso para teclear y seguir el seguimiento. Entonces este tipo de cosas. Tenemos un full soplado for loop con las tres cláusulas, etcétera. Hay otras formas de hacerlo. Oraciones a eso. Puede que te encuentres. No los vamos a pasar por aquí, Pero hay generadores y camino de vuelta en el día en admiración por parte de Java. Un dato. Esos son de muy vieja escuela. Generalmente no lo verás a menos que estés mirando código realmente viejo. De acuerdo, entonces, uh, lista es una clase, y la gente ha escrito muchos métodos, igual que nuestras clases tienen muchos métodos útiles. También lo hace la lista. Y hemos visto los métodos como get set and add ya y también el tamaño del método para obtener el tamaño de la lista más allá. Al lado de esos, hay uno, por ejemplo, en absoluto. Entonces es que tengo una lista diferente, y quiero agregar todo en la lista a esta lista. Yo sólo podría pasar todo el asunto, y en todos ellos despejando la lista, vacía y se deshace de todo, vuelve a una lista vacía. puede preguntar si una lista contiene ciertos objetos Un supuesto que tienes, ya sabes, una lista de jugadores, y yo y yo tenemos un determinado jugador. Tengo al jugador azul por aquí, y digo: Espera, ¿ está el jugador azul en esta lista? Déjame preguntar. Por lo que contiene es un método que te permite preguntar. Se puede preguntar el array o lo siento. Se puede preguntar la lista de sus vacíos. Se puede eliminar un objeto de la lista, y también se puede ordenar usando algo llamado comparador que verá un poco más adelante. De acuerdo, ahora, una desventaja sobre un aumento para esto es que no pueden sostener presidente, así que no se puede hacer una lista de int o double o floats o algo así. No obstante, hay un tipo llamado Integer Capital I entero, que es una clase en lugar de un primitivo. Ese aire, llamado el Job, son clases de rapero, y hay todo un asunto para hablar de esos Hablaremos de esos en un capítulo posterior también . Pero si realmente necesitas primitivas, por ejemplo, como si estuvieras haciendo cálculos numéricos, probablemente querrás usar un aumento porque las clases de rapero, como el entero, son un poco más lentas que su. Y si estás haciendo un cálculo numérico, donde tu resumen ya sabes, 10 millones en su Probablemente no quieras usar indígena porque eso será mucho más lento para que muchos accesos, entonces solo termina. Entonces en esos casos, como si estuvieras haciendo cálculos científicos o numéricos, probablemente sigas usando la carrera. Pero para el tipo estándar de programación de negocios, o como nuestra simulación de juegos aquí, definitivamente quieres usar listas. De acuerdo, así que eso es suficiente para empezar. Todavía tenemos a lugares donde tenemos un artículo donde realmente hay más de uno en la vida real . A los jugadores en las cartas, Muy bien, entonces vamos a cambiar nuestro gay nuestro juego de simulación, para tener una lista de jugadores y tener la baraja para tener una lista de cartas. Ahora todavía hay uno del lugar que queda es que son las piezas, como un jugador podría tener más de una pieza. Por ahora, sólo vamos a estar de acuerdo con que el jugador sólo tenga una pieza. Todavía podemos moverlo por la pizarra. Todavía pueden competir entre sí. Seguirá siendo juego interesante. Entonces una vez más. Uh, puedes pausar el video aquí, ir a tu proyecto, seguir las instrucciones, porque de nuevo, esto es algo involucrado. Ejercicio comparado con los anteriores de la clase. Y yo solo puedes pausar el video aquí. Y cuando termines, vuelve y luego trabajaremos juntos en esto. Está bien. Bueno, bienvenido de nuevo. Veamos cómo podemos hacer estos ejercicios de lista. Muy bien, entonces, um, necesitamos lugares. Echemos un vistazo a nuestras instrucciones. En primer lugar, nos alejamos demasiado de las instrucciones, vamos al partido lamentable. Elimina el atributo de jugador en una lista de jugadores. De acuerdo, Así que volvamos a nuestro lamentable juego aquí. Eso espero. Yo estaba en juego estelar, ¿eh? Está bien. Dice que no vamos a tener un jugador. Vamos a tener un jugador en la lista, así que listan. Entonces lo vamos a llamar jugadores. ¿ Todo bien? Ahora, una de las cosas que verás de inmediato, su trabajo es reclamar que no sé cuáles son las listas. Está bien. Esta es la primera vez que estábamos usando una clase del trabajo una biblioteca y tenemos que dio realizar un trabajito que se llama importar la clase Y lo que eso significa es que tenemos que decirle a Java, que, porque hay muchas clases por ahí llamadas List que tenemos que decirle al compilador de cuál estamos hablando. Ahora hay muchas formas de hacer esto After list, puedes poner tu cursor ahí y golpear el espacio de control, y aparecerá una pequeña cosa de dialectos. ¿ Qué lista quieres? Uh, otra forma de hacerlo es a través de este menú fuente, derecho, derecho, haciendo clic en fuente. Y aquí hay algo llamado importaciones organizadas, que es turno controlado oh, control de capital O en ventanas. Y cuando haces eso, en realidad hace lo mismo. Está bien. ¿ Qué lista quieres? Salta este chooser y lo que queremos es java dot Te hasta esa lista. De acuerdo, así que estas cosas como trabajo que hasta java que un diputado calmar que sol dot herramientas no saltan asi que le dices a estos aire agua llamada paquetes estarán hablando de paquetes de nuevo en una clase posterior. Pero estas tres clases de lista son todas muy, muy diferentes entre sí. Entonces quieres asegurarte de conseguir trabajo que hasta esa lista, OK, OK, así que asegúrate de que seleccionado has terminado y ahora la línea roja desaparece. Ahora, ¿qué pasó? Mira la parte superior de tu código. Ahora hay un comunicado de importación. Se trata de importar lista Java Util. Hablaremos más de esto cuando hablemos de paquetes. Pero esto es solo decirle al compilador cuando digo lista, que enumeró mi hablar de estoy hablando de Java util list. De acuerdo, así que con eso fuera del camino ahora tenemos un problema aquí y dice, Uh, ya no hay tal cosa como jugador. Entonces sus jugadores ¿verdad? Pero los jugadores no es igual a un nuevo jugador, ¿verdad? Y como dice, va a ser una lista de array, ¿ verdad? Entonces vamos ah, ¿qué va a mantener esto? Porque lo usaré más tarde, pero diré nuevo un realista ahora. Mismo problema. La lista de Ray es roja porque Java no sabe qué es array menos. No sé de qué estás hablando ahora. Voy a hacer el otro espacio de control de método y dice Ray List. No obstante, ese es el que quiero. Y lo llena así, y vuelve a poner en el jugador tipo. El hecho de que jugador ya esté aquí. Joppa entiende. Esta es una lista de su lista A de jugadores, por lo que en realidad puedes eliminar esto y no se pone rojo. El trabajo está contento con eso, ¿verdad? Entonces es como, OK, puedes hacerlo de cualquier manera. Generalmente, esto se llama Sintaxis de Diamante. Cuando lo haces así, esa es la forma preferida. Sólo porque de nuevo, hay menos desorden en tu código como no necesitas declarar jugador dos veces. Y es un poco Hablamos de números mágicos en el capítulo anterior. Es un poco una declaración de tipo mágico como este jugador, y es igual a este de aquí. O si tú, si tipeas algo diferente si tipeas en Square se va a romper. Dijo que no le gusta eso. Está bien, ahora dice, Um, vale, hablamos de hacer eso. Vamos a crear dos jugadores azul en verde. Ambos pueden arrancar en la primera plaza. Está bien, genial. Entonces recuerda cómo hacemos esto con los jugadores dot Añadir Así podemos decir esto, no jugadores. Tienes que deletrearlo bien. Agrega algún jugador nuevo. De acuerdo, bueno, aquí hay un nuevo jugador. Tomemos Purcell. Ya no necesitamos eso. Corta eso aquí. Entonces estoy creando un nuevo jugador, pelo en su lugar y pasando directamente al método del anuncio Así que sin duda podrías haber dicho Player P es igual a nuevo jugador y luego decir jugadores que Ad P, eso está totalmente bien. Pero realmente no lo necesitas. Simplemente puedes hacerlo así. Es un poco de atajo otra vez. Entonces mostrándote algunos atajos y dijimos uno azul y otro verde. De acuerdo, ahora tenemos un jugador azul en el Jugador Verde. Ahora ambos nos fuimos, y dejamos que ambos comiencen en el cuadrado cero. Eso está bien. Si quieres que tu jugador verde empiece en alguna otra plaza como la plaza 15 o lo que sea, ya sabes, la cuarta parte del camino o algo así, puedes cambiarla. Eso está bien. No va a causar ningún problema en esa nota en el rial Lo siento juego. Si una lente de jugador en la misma plaza es la otra, golpeas a ese jugador con frecuencia, envíalos de vuelta a su casa. En nuestra simulación, no vamos a ponernos tan sofisticados. Entonces el hecho de que los jugadores comiencen en el mismo marcador no significa realmente nada. ¿ Todo bien? Ahora señala el compilador y las instrucciones. Ambos notan que el método del avión está roto. Muy bien, porque solíamos ir cinco veces hasta que el jugador te diera el turno. Toma tu turno, toma tu turno cinco veces. Pero ahora tenemos múltiples jugadores. Entonces en cada turno, necesitamos que los jugadores cada jugador se turnen, ¿ verdad? Por lo que necesitamos hacer eso de lo que hablamos Iterando sobre la lista de jugadores. Recuerda que la sintaxis de cuatro bucles de las diapositivas. Entonces para el jugador P en jugadores, vamos a tomar su turno así. Es evidente que así se ve un poco más bonito. De acuerdo, así que esto es Ah, recuerda cuando jugamos, hacemos cinco. A lo que llaman estas rondas. Um, y necesito llamar a esto así que ten en cuenta que tenemos una compilación por aquí. Esto es que no lo sé. A jugador es Lo llamaste P? Sí, ese fue mi error. Eso debería ser jugador. Perdón por eso. Vale, Ahora es más feliz Esta carta, yo esto es como el número de rondas que estaban jugando bien. Entonces podrías llamar a esta ronda en lugar de yo Si quisieras. Enseguida pasamos por encima de los jugadores. Recuerda el aire de los jugadores en una lista. Por lo que se conserva el agua y los jugadores azules van a ir primero y luego jugador verde. ¿ Verdad? Y si quisieras, podrías poner otra ayuda aquí arriba, uh, uh, terreno de partida. Y luego hola. Correcto. Entonces, cuando nuestra salida en la pantalla cada vez que empezamos mi ronda, diría: Hey, Hey, estamos empezando la zona cero. De hecho, se va a ir 20035 o 034 Dado son para plomo. De acuerdo, eso se encarga del lamentable juego donde ahora hemos actualizado nuestro juego de un jugador a dos. Y, por supuesto, podríamos hacer tantos jugadores como queramos aquí. Podríamos agregar 1/3 jugador, jugador, jugador rojo, jugador amarillo, jugador blanco, negro y en tantos como queramos Las listas de miembros pueden contener tantos jugadores como quieras para sumar derecha. Se quedarán en el mismo orden que tú los declaras. Por lo que llama. Agrega el 1er 1 en el segundo en el 3er 1 Uh, se quedarán en el orden que los hayas agregado a la lista principal. Está bien. Una cosa más que hacer para que esta cosa funcione es una baraja de cartas realmente, y ésta se complica un poco más también. Un zit habló arriba en la parte de requisitos de la sección. Realmente tenemos que montones de cartas y tú lo piensas. Cuando estás jugando un juego de cartas, tienes la pila de sorteo y la pila de descartes. Eliges una carta por encima de la gota, yo la jugarás, y luego la tiras al montón de descartes. Y cuando la pila de sorteo se vacía, las cosas barajan para descartar. Pile y esas cartas vuelven a entrar, conviértete en la pila de empate, ¿ verdad? Entonces tratemos de simular eso un poco en nuestro código. Entonces tenemos, uh, uh, la clase de cubierta. Ahora echemos un vistazo a cómo se ve la baraja. Al minuto es muy aburrido. Tiene una carta, y al robarla devuelve la carta. Está bien, hagámoslo un poco mejor. Vamos a tener que listas de tarjetas. Entonces vamos a la carta llamada esa pila de sorteo en una lista privada de cartas llamada el descarte. Está bien, y voy a allá. Hice mi turno de control. No. Dos. Importante. El listado de clase. Genial y veamos lo que dicen aquí en el constructor crear las dos listas de matriz. Está bien, así que no más de estas tonterías. Vamos a decir sorteo pila igual a nueva lista lista lista lista lista y descartar Pile igual a nuevo realista. Está bien, ten en cuenta que no usé este punto Podrías usar el stott. También se dio cuenta de ese trabajo. Nuestro eclipse colorea los nombres de las variables para que veas que esto es azul y esto es azul. Y esa especie de para llamar tu atención como, oye, oye, esta pila de dibujo en esta pila de sorteo. Lo mismo, ¿verdad? A eso te refieres. Se podría crear una variable local llamada Draw pile y eso anularía eso, y se colorearía de manera diferente. Pero no nos alejemos demasiado, ¿de acuerdo? Necesitamos crear algunas cartas. Hagamos valores del 1 al 12 y nos gusta hacer cuatro de cada uno. Entonces vamos a necesitar dos bucles aquí, uno donde el valor va del 1 al 12 y el otro que sólo tiene cuatro conteos para crear para esto. Está bien. Y luego dice después de que creaste carta añadida a la pila de sorteo. Entonces hagámoslo. Simplemente ahí crearemos las cartas. Se podría poner esto en un método separado como lo hicimos para crear los cuadrados, pero no es del todo tan complicado. Por lo que queremos crear valores del 1 al 12. Entonces llamemos a este valor variable en lugar de I. Y digamos que empieza en una y podemos decir menor o igual a 12. ¿ Verdad? Y así ahora el valor el valor del valor variará de 1 a 12. Y dijimos, Por cada valor de cada carta, vamos a crear cuatro. Entonces para este, sólo necesitamos un genérico para Loop cero yo menos de cuatro por porque Plus, para mí, era una tarjeta. Duro clips nuevos, nueva tarjeta de valor justo fuera de escribo porque quiero hacer cuatro tarjetas que valoran 14 tarjeta que valoran a por valor crediticio. Tres todo el camino arriba por la cubierta. De acuerdo, entonces y luego se dijo en cada tarjeta a la gota. Voy así vamos a decir Draw, looks de pila. ¿ Estás bien? Tengo la tarjeta. Genial. No, está hablando de Hagamos el juego un poco más interesante aquí, diciendo, Bueno, podríamos dejarlo así pero las cartas juegan en orden como tenemos cuatro unos y luego cuatro dos y cuatro tres y luego cuatro cuatro cuatro patas y todavía va a ser muy aburrido. El juego fue muy predecible. Entonces, vamos a barajar las cartas ahora. Vamos a necesitar alguna ización aleatoria aquí donde queremos hacer estas cosas al azar. Um, eso es un poco más allá de lo que queremos hacer. Resulta que hay una clase en Java llamada colecciones colecciones. Por lo que se vuelve rojo porque no lo hemos importado. Voy a controlar el espacio. Y es su trabajo que labres esas colecciones y tiene un método llamado Shuffle, donde baraja una lista. Entonces voy a barajar la gota enferma, está bien. No es algo de lo que hablamos en la diapositiva ellos solo llamando tu atención sobre ello. Aquí. Es algo muy útil. Hablaremos de la clase de colecciones en la lección posterior. Tiene algunos métodos útiles, como Shuffle, por ejemplo. De acuerdo, entonces ahora necesitamos actualizar el montón de sorteo porque la deserción apenas estaba devolviendo el auto de préstamo . Ya no hay tarjeta, así que hagámoslo de la forma en que lo hacemos como en la vida real, ¿ verdad? Entonces, uh, vamos a agarrar esto. Y decimos, um, necesitamos una tarjeta. Voltea tarjeta igual a gota. Voy a conseguir cero, verdad. Se va a sacar la primera carta del montón de sorteo, y eso la quita de la gota enferma. Ahora, vamos a querer devolver esa tarjeta a la persona que está llamando al método de sorteo derecho a la persona que llama eso sí queremos decir tarjeta de retorno, pero recuerda lo que sucede en el mundo real. Te quitas la carta del montón de sorteo, y luego la pones en la pila de descartes, ¿ verdad? Entonces no lo perdemos, porque ahora mismo lo hemos quitado de la gota que voy a enumerar. Y si no hacemos algo, si vamos a perderlo de vista, correcto, correcto, así decimos el montón de descartes y carta. Ahora el orden aquí, si estás pensando en la vida real, dices: Bueno, yo robo la carta y luego la juego. Y cuando termine, lo descarto cuando no puedes hacerlo en ese orden en Java. Porque la declaración de retorno siempre tiene que ser la última declaración del método, ¿no? No puedes No puedes robarte la carta devolverla y luego descartarla más adelante. Así. La sintaxis no tiene sentido en los desempleados, por lo que hay que poner la declaración de retorno al final. ¿ Todo bien? Ahora, me pregunto si alguien ve algún problema con esto, ¿ verdad? Si jugamos lo suficiente, si tomamos suficientes jugadores y vamos suficientes rondas, la pila de empate se va a vaciar, ¿ verdad? Y cuando lleguemos aquí, ¿qué va a pasar? Cuando digamos gota, conseguiré cero. Y si no hay cartas en la pila de sorteo, vamos a sacar uno de esos índices fuera de límites. Excepciones, ¿verdad? Algo así como muy parecido a lo que vimos en el capítulo de A Ray, y se va a estrellar nuestro pobre programa. Entonces pensemos en lo que queremos hacer. Sí, la pila de sorteo está vacía. ¿ Qué debemos hacer? ¿ Este pequeño espacio? Ahí hay algo de espacio. Aquí. Haz esto para que veas un poco más de lo que estoy haciendo. De acuerdo, bueno, ¿qué haces en la vida real? Si el sorteo se acumula vacío, ¿ agarrarás la pila de descartes? Lo barajas y haces que eso se convierta en la gota enferma. Entonces llamemos a esa operación rehuffle porque voy a rehuffle las tarjetas. Bueno, ¿qué es la reordenación? Va a ser un pequeño método de ayuda que vamos a añadir aquí ahora. Podría simplemente ir tecleando esto, pero déjame mostrarte algo más de Eclipse en vivo aquí. Me lo da, subraya el despotrero y dice: Oye, Oye, no hay método. Reestructuración en frío. ¿ De qué estás hablando? Y luego te da algunas correcciones rápidas, Una de las cuales es tal vez quieras crear ese método. Es como, Bueno, sí, De hecho, sí. Mira eso. Entonces ahora no tuve que escribir vacío privado rehuffle lo hizo. Y dejó esta útil manita aquí diciendo: Oye, Oye, no olvides que tienes que poner algún código aquí. Yo solo auto generado método para ti, pero no hay nada ahí. De acuerdo, lo pillamos. Está bien. Entonces lo que quiero hacer aquí es que quiero tomar todas las cartas de la gota enferma y luego volver. Lo siento. De la pila de descartes y luego de vuelta a la pila de empate. Después barajarlos. barajarlo. Correcto. Entonces recuérdelos Los métodos que lo vimos, podemos decir empate, arado y todo de la pila de descartes para que se lleven todas las cartas que airen en la pila de descartes las mueva al montón de empate. Ahora aquí hay algo donde los objetos en la computadora difieren de los objetos en la vida real. En la vida real, una carta es o un Empire Lee o la otra. No puede estar en ambos montones simultáneamente. Pero en esto en la memoria de la computadora, puede gustarle la pila de sorteo y la pila de descarte ambos pueden tener una referencia a la misma carta. Y ese es el problema que tenemos en este momento es que las cartas están todas en ambos montones en este momento . Bueno, eso no queremos. Estamos tratando de Teoh vaciar la pila de descartes y poner todo en la pila de sorteo para que podamos decir Descartar pila punto claro ¿verdad? Vimos ese método en las diapositivas. Está bien. Ahora el montón de descartes está vacío de nuevo, y todos estamos bien. El último problema que tenemos es que las cartas siguen en el mismo orden que fueron la primera vez a través de la baraja, y podría ser divertido cambiar un poco las cosas. Entonces, usemos nuestro método aleatorio otra vez, ¿verdad? Caída enferma. De acuerdo, entonces cada vez que estamos rodando tarjeta primero comprobamos es una gota. Voy a vaciar del turno anterior. Si lo es, entonces hagamos una reordenación, que mueve todas las cartas de la pila de descartes de nuevo al montón de sorteo y luego la baraja . Por lo que obtenemos un pedido diferente por lo que hace un poco más interesante. Y luego sacamos la carta de la parte superior de la baraja, sumada a la pila de descartes de ellos. Devolví esa tarjeta a la persona que llamó. Muy bien Y detalles de eso, por supuesto, estaban en tus notas aquí, así que podrías, eh, echarle un vistazo y seguirlo bastante de cerca. Pero creo que lo tenemos todo. Vamos a echar un vistazo a nuestros problemas Tab. No hay problemas de compilador. Entonces intentemos ejecutar nuestro lamentable juego y ver qué pasa. Mueve lo que fue rápido. Está bien, echemos un vistazo. jugador inicial de la ronda cero Azul está iniciando su turno. Se consiguió un jabón de valor 11. Ocho jugador mueve su pieza de la plaza cero a la plaza 11. El jugador Green también consiguió un 11. Ahora hay algo mal aquí. Todo el mundo ha conseguido 11. A ver. ¿ Qué hicimos mal? Um, ha barajado pila. De acuerdo, veamos quién está sacando la carta esa pieza o el jugador, creo. Y tarjeta se movió Pieza. Mm. Uh huh. Veo el problema aquí. A lo mejor ya lo cogiste. Cuando rompemos una carta que escribí aquí, roba amontonada. Consigue cero. Eso pone la carta a cero en la primera posición, pero en realidad no la quita de la baraja. ¿ Verdad? Se retira el método que busco. Está bien. Perdón por eso. Vamos a correr nuestra cosita otra vez. Y ahora es un poco más interesante. A partir de rondas aquí, Jugador azul juega la carta de valor. 10 termina en la plaza 10. El jugador verde obtiene valor concedido. Tres termina en la plaza tres. Ronda inicial un jugador azul obtiene carta de valor uno. Y ahora el jugador Green obtiene una carta de valor seis y va en líneas bajas. Y ahora hay un poco de competencia aquí. Y al final, terminamos con jugador verde trouncando jugador Azul 43 a 27. Entonces, jugador ah, azul tuvo algo de mala suerte aquí con los dos y un seis y ah, uno y los tres de los tres del verde. Uh, pero de todos modos, jugador Green ganó esa ronda, así que volvamos a nuestra presentación de diapositivas aquí. Esto se resumen las colecciones que vimos resolvieron el problema del problema de tamaño fijo de una tarifa. Recuerda, cuando creas una matriz, tienes que decir que cuántos elementos va a tener, Pero cuando creamos una lista, no tenemos que decir que solo seguimos agregando objetos a la lista hasta que nos sientas como estamos hechos bien. Además, la lista tiene muchos otros métodos de metanfetamina útiles y, como el tamaño y en absoluto, y borra y elimina los métodos establecidos para los que muchos de ellos no existían. A levantar listas de la versión más común de colecciones Java y en esta silla. Pero vimos agregar eliminar iterando sobre objetos en una lista. Muy bien, nos vemos en el próximo capítulo. 13. 09 PolymorphismAndInterfaces: De acuerdo, bienvenidos al Capítulo nueve, donde vamos a hablar de polimorfismo e interfaces cómo lidiar con diferentes tipos de cosas. Está bien. Tan a menudo lo que estamos haciendo. Software. Tenemos diferentes tipos de un solo concepto, como tenemos diferentes tipos de animales, diferentes tipos de vehículos, diferentes tipos de jugadores o personas o empleados. Y a veces es un poco truco para hacer un seguimiento de todas las variaciones. Entonces en lenguajes orientados a objetos, existe una facilidad llamada polimorfismo, que nos ayuda a lidiar con esto. Y entonces las interfaces de trabajo son una forma clave para implementar técnicas polimórficas. Pasemos y veamos qué significa todo eso. Por lo que realmente viene tener múltiples tipos de cosas en el programa de software para los ejemplos en las diapositivas de aquí, vamos a hablar de, Ah, algún tipo de software que mantenga una lista de personas, un lista de usuarios o miembros o algo así, y nos gusta ponernos en contacto con ellos, y cada uno tiene un conjunto de métodos de contacto. Por lo que un método de contacto podría ser contactar el correo electrónico a través de texto mensaje de Facebook, Twitter , instagram, cualesquiera que sean todos los diferentes métodos de contacto que quieras agregar. Y cómo se hace un seguimiento de todo eso como cuando se quiere mandar un mensaje a alguien, ¿Cómo se sabe? ¿ Cómo sabes cómo hacerlo? En base al método de contacto? Bueno, la forma directa es hacer un montón de declaraciones, si lo demás. Entonces aquí hay un método llamado Enviar un Mensaje de este método de contacto y dices, Bueno, Bueno, si es un correo electrónico, si el tipo de contacto o método de contacto es correo electrónico, entonces ya sabes, haz algunas cosas de email más. Si es texto, entonces ponte en contacto con texto o si es Facebook, entonces haz eso. Y puedes simplemente ordenar de enumera todos los diferentes tipos de métodos de contacto. Y sabes que eso ciertamente funciona. Um, sin embargo, si empiezas a necesitar hacer otras operaciones, digamos que también necesitas autenticarte. Bueno, la forma en que tienes indica con el servidor de correo electrónico o el servidor de SMS o el sever de Facebook esos aire diferentes también. Entonces ahora necesitas otro. Si lo contrario bloque de cosas para el método de autenticación, se puede ver a dónde va a llevar esto. Va a terminar arrastrándose por todo tu código. Entonces si lo demás bloquea lo que bloquea estos aire bien, excepto que tienen muchos problemas. Tienden a replicarse todo a través de tu código, como vimos en la diapositiva anterior, y peor aún que eso, crea múltiples puntos de mantenimiento. Entonces cada vez que añades o eliminas un tipo de método de contacto, tienes que recordar dónde todos esos bloques si lo demás son todos esos bloques de conmutación y asegurarte de cambiarlos, bien. Y si pierdes uno, puedes tener un verdadero desastre en tus manos. También son feas y difíciles de leer, como tienden a llegar muy largas y muy detalladas y realmente asquerosas. Y así tienes un método que tiene todos los detalles sobre el envío de un mensaje a Facebook y los detalles sobre el envío de un mensaje al servidor SMS y los detalles sobre el envío de un mensaje al servidor de correo UNE. Y eso es mucho detalle para golpear en un pequeño método, ¿ verdad? Y una vez que tengas todo eso ahí, van a haber algunas similitudes entre algunos de los casos. Y así es realmente difícil resistirse a la tentación de abstraer parte de ese código y ponerlo en la parte superior. Y ahora todos los diferentes casos. Pareja aérea juntos. Y así, si estás editando ese código para un caso, terminas potencialmente rompiendo un montón de otros casos. Y en cualquier fue, uh, si tienes buenas prácticas de Q A, si lo modificas, ese método que tiene bloques para todos los diferentes tipos de contacto y realmente mejor probarlos todos porque puede que tengas introdujo un error en ese método. ¿ Quién sabe qué pasó ahí dentro? Y así tu Cue 18 probablemente querrá probar todo. Y ese es un papel empieza a rodar carga cuando hay muchos tipos diferentes. Entonces encontremos una mejor manera en lenguajes orientados a objetos. Tuvimos esta idea llamada polimorfismo, que está construida para resolver este problema. Por lo que seguimos este principio de que en objeto es como un gerente. A ellos les gustaba delegar. No les gusta hacer el trabajo ellos mismos. Entonces ese método que vimos en el primer conjunto de métodos que tenían todo ese detalle así no es la forma correcta de hacerlo. Se le quiere dar la prueba a alguien más, así que es como si obtuviéramos estos objetos de método de contacto. No podemos simplemente decirles que envíen el mensaje. Ellos saben de qué tipo tienen razón, como el objeto de método de contacto de correo electrónico. Sabe que es por correo electrónico. Está en su nombre. ¿ Por qué no hace el correo electrónico? ¿ Por qué tengo que hacerlo? Y así lo que queremos es que todos los diferentes objetos de método de contacto reaccionen de manera diferente cuando llamamos al método de mensaje enviado dependiendo de su tipo, ya conoces tu Facebook o Twitter o SMS, hacen cosas diferentes que se llama polimorfismo. El término significa muchas formas, y así significa como cuando envías el mismo comando de mensaje, los diferentes objetos reaccionarán de manera diferente. Hay muchas formas diferentes citan sin comillas a su reacción, ¿ verdad? Entonces, ¿cómo se ve código? Pongámoslo aquí. Entonces, antes que nada, uh, a lo que queremos tratar de llegar con el Polimorfismo está en ese método grande, feo que teníamos hace un minuto enviar mensaje a pasar en un objeto método de contacto. Ahora sólo queremos enviar un mensaje polimórfico. Solo queremos decir, Hey, Hey, contactar objetos, enviar tu mensaje y el objeto de contacto hará lo correcto en función de su tipo. Y nosotros como código de llamada aquí no necesitamos saber qué tipo de método de contacto es. Ese es el punto clave. Eso es lo que reduce la complejidad en este método. Y como bono, nuestro método se ha derrumbado a una línea de código. Entonces es un poco difícil. Teoh. Arruinó eso, ¿verdad? No hay predecir que no hay muchos bugs en este método. Muy bien, para que esto funcione, digamos que tenemos una clase que se llama método de contacto por correo electrónico y luego tenemos otra clase. Se llama método de contacto de texto, y luego tendremos, ya sabes, Facebook y Twitter it center. Tenemos toda una serie de estos objetos de método de contacto. Para que este bien funcione, todos necesitan tener un método de metanfetamina llamado enviar mensaje, ¿ verdad? Y así cada mensaje cada método tiene que ser nombrado exactamente vacío público enviar mensaje, y si no tienen el mismo nombre de método, se va a romper bien. Entonces digamos, dentro de un año contratas a un nuevo programador y les dices que agreguen Twitter. ¿ Estás seguro de que saben que tiene que llamarse vacíos públicos y mensajes? Tal vez ni siquiera lo sepan, y podrían deletrearlo mal o tal vez devolver un valor diferente o algo así, o darle un parámetro y entonces no va a funcionar. Va a romper el mensaje. Entonces, ¿cómo se guardan estas firmas de métodos y se hunden? Bueno, aquí es donde entran las interfaces, así que en el trabajo. Pero tenemos esta cosa llamada interfaces, que parece una clase. Consigue aquí mi cursor. Entonces es como en lugar de métodos de contacto de clase pública, es el método de contacto de interfaz pública Muy bien, por lo que es un tipo diferente de bestia similar a una clase, pero en una interfaz, puedes definir firmas de métodos sin nim, Plantación ve un vacío público enviar mensaje y luego un derecho cínico. Ahí termina. No hay corsé rizado. Ahí no hay líneas de código. Y esto es lo que en Java y en general, esto se llama método abstracto. Es como si estuviera diciendo que hay un método llamado enviar mensaje, pero no te estoy diciendo lo que hace. Y luego las clases individuales como email contact, method, text, text, contact method, contact method, van a citar unquote implementan esta interfaz y tienen un método con esta firma de método . Entonces vamos a ver cómo se ve eso. Está bien, así que aquí está el correo electrónico de contacto Clase de método y contacto de texto Clase de método. Tenemos esta nueva palabra clave aquí llamada Implementos para que cualquier clase pueda implementar en interfaz. Y cuando haces eso, significa que tienes que tener el método que declara la interfaz. O bien el compilador marcará eso como una advertencia za. Aquí hay otro PCC, que es esta divertida mirando a anular. De acuerdo, ¿qué? Eso así en el trabajo. Pero las cosas que empiezan por se llaman anotaciones, y es algo así como metadatos. Generalmente, es una instrucción al compilador, aunque ahora no siempre, pero no. En este punto lo es, y hablaremos de anotaciones más adelante. Pero básicamente lo que esto dice es que hey, espero que este método aparezca en esta interfaz, ¿ verdad? Entonces está diciendo que estoy anulando que ese, uh, uh, ese método, eso es todo lo que aparece en la interfaz. Y si lo deletreas mal aquí, o tú o ese método este método no existe en la interfaz. Entonces el compilador también te notifica bien. Está bien, así que volvamos a verlo. Por lo que los compiladores te van a ayudar a mantener sincronizadas estas firmas de métodos Tan pronto como implemente en la interfaz. Si no pones el método en el cuerpo aquí, vas a obtener un error de compilador. Se va a decir, Hey, implementas método de contacto, pero no tienes que enviar método de mensaje en tu clase como si eso fuera un error y lo mismo para la anulación. Ah, anotación ahí. Entonces aunque tuvieras en otra ubicación en el método de contacto de texto, aunque tuvieras el método de envío de mensaje definido si tenías otro aquí y dices al anular enviar mensaje de texto, bueno, eso no existe hasta aquí en el método de contacto. Por lo que esto también va a generar la advertencia del compilador. Entonces, entre implementar las interfaces y marcar los métodos con anulación en anulación, te ayuda el compilador te avisará si tus firmas de métodos se dessincronizan. Si hay algo malo en las definiciones de tu clase, recibirás una advertencia o error del compilador, y esto evitará que vayas más allá. Está bien. Un par de cosas sobre las interfaces no se puede en soporte les dio forma, por lo que no se puede decir método de contacto es igual a nuevo método de contacto. Las interfaces correctas no pueden estar en Stan Sheeted. Ahora hay una vieja broma de Chuck Norris sobre lo duro que es Chuck Norris. ¿ Será Chuck Norris, Canon Stan? Ella comió interfaces. Pero no, no podemos porque qué harías si tuvieras este objeto, este objeto método de contacto y llamaras Enviar mensaje en él. No hay ningún cuerpo de Método aquí, ¿verdad? Es sólo un punto y coma, así que la cosa no sabría qué hacer. Entonces es sensato que no tiene sentido crear una instancia de una interfaz. Entonces, ¿qué hacemos? Bueno, creamos esos tipos de concreto, así que aquí está la forma estándar de hacerlo. Tienes método de contacto. método número uno es nuevo método de contacto por correo electrónico método de contacto con dos es igual a nuevo método de contacto de texto . Entonces aquí decimos que el tipo es método de contacto y la clase es esta específica. Entonces el tipo se refiere a qué tipo le dice al compilador que la variable es así esta variable Método uno es un tipo de método de contacto a es un tipo de método de contacto. Pero la clase que estás en Stan sheeting, estas clases de aire aquí, nuevo método de contacto por correo electrónico, nuevo método de contacto por texto para que seas tipos pueden ser interfaces, clases de guerra y a partir de ahora para anteriores a esto, siempre hemos visto clases como Jugador igual a jugador nuevo, ¿ verdad? Por lo que era del mismo tipo que la clase que cuando Stan sombreaba. Pero, um, los tipos de variables pueden ser clases o interfaces. Y Pero cuando tú y Stan Shade, un objeto tiene que ser una clase que no puedes soportar, ella comió interfaces. Ahora la razón por la que esta sintaxis funciona es porque une método de contacto masculino es, ah, método de contacto, ¿ verdad? Entonces cuando dices método de contacto Método uno es nuevo. Método de contacto por correo electrónico Bueno en el método de contacto por correo electrónico es un método , por lo que no es una mentira , correcto, Y la razón por la que esto te ayuda a hacerlo haciendo para mantener tu abrigo limpio haciendo que el método de contacto en un tipo de interfaz es que te permite escribir código muy genérico. Entonces aquí hay algún código abajo, que se escribe solo en términos de método de contacto. Por lo que hay una lista de métodos de contacto, y podrían ser métodos de contacto por correo electrónico, métodos contacto de texto, métodos contacto de Facebook que podrían ser cualquier cosa menos que los obtienes justo como una lista de métodos de contacto . Entonces de nuevo, el tipo de la lista es método de contacto. Ahora sólo puedes rasgarlos y decir, mandar mensaje. Por lo que este código es muy genérico, muy simple difícil de poner bugs porque no estás tratando con todas las variaciones entre texto y correo electrónico y Facebook y Twitter. Simplemente estás buceando a través de estos métodos de contacto, y todo lo que sabes de ellos es que tienen un método cultos y mensaje. Acabamos de disparar lejos. Tratarlos todos igual es la gran ventaja de tener tipos polimórficos y firma de método polimórfico para que no tengas que saber nada de los detalles. Simplemente sabes que tienen esta firma de método, y lo llamas bien. Por lo que algunos consejos aquí recuerdan el método de contacto por correo electrónico es un método de contacto. O tal vez más precisamente, dices que es un tipo de método de contacto, y el método de contacto está en el tipo más genérico en el correo electrónico. método de contacto, obviamente, es más específico, correcto, por lo que siempre quieres intentar mantener tu código es lo más genérico posible. Que más genérico sea tu código cuantos menos bugs va a tener, menos razones tendrás para cambiarlo. Um, si todo es Gran Bretaña en cuanto a métodos de contacto y agregas o borras el método de contacto por correo electrónico , tienes menos cambios que hacer. Entonces, si tuvieras eso giró el método de contacto de tipo email rociado por todas partes. Correcto. Entonces cada vez que creas objetos que vas a estar usando Lee polimórfico haz que la variable escriba el tipo de interfaz como este, como método de contacto, como método de contacto, y luego en su lugar da forma a la subclase de concreto real como esta con el concreto clase como esta. Muy bien, sólo muy rápido. En caso de que te interese el UML, llaman a esta especialización de generalización, y se denota así. Um, tienes esta forma del aire por delante en realidad significa algo en, um El Así que este triangular cerrado nuestra cabeza significa especialización de generalización, o la gente lo llama Jen spec porque son demasiadas sílabas en el tablero significa implementación de interfaz. La línea sólida significaría herencia de clases, y hablaremos de eso en el próximo capítulo. Todavía no hemos hablado de eso, y la flecha siempre apunta desde la, uh, más específica hasta la clase más genérica. Está bien, esa cosa de aspecto gracioso dentro de los soportes angulares en la parte superior. A eso se le llama estereotipo. Y esa es otra forma de UML de decir, Oye, esto es una interfaz, ¿de acuerdo? Y no en el UML, sino en términos de terminología, escucharás estos términos subtipo y súper apretados. De hecho, Es un poco difícil hablar de interfaces sin usar estos términos. Pero cuanto más específico se llama el Subtipo, y lo más genérico es el super tipo, donde cuanto más especiales concepto más especializado es el subtipo en el más genérico Generalizado es el super tipo, Uh, y cuando lleguemos a la herencia en el próximo capítulo, escucharás una súper clase. Y la subclase cuando realmente tienes interfaces no es exactamente apropiada para, digamos super clase, pero la gente todavía lo hace. También oirás hablar de, ah, clase de padres o tipo de padres e hijo. También escuchas ancestro y descendiente. Por lo que usamos esta cosa es como casi como un tipo de terminología de árbol genealógico. Y recuerda, vuelta a la UML, las flechas siempre apuntan en la dirección de la dependencia, Así que el contacto significaba esa interfaz. Recuerda, no sabe nada sobre el método de contacto de correo electrónico, pero en el email Clase de Método de Contacto, dice, implementa método de contacto para que sepa sobre método de contacto. Si alguien elimina este archivo, éste fallará en compilar bien, porque no sabrá qué método de contacto es. Está bien. Más polémica. Hay una controversia de nombres con interfaces a veces uh, no está claro qué quieres nombrar estas cosas, porque digamos que tienes una clase de persona, y por alguna razón necesitas hacer una interfaz para la clase de persona. ¿ Cómo lo llamas? Ya has usado el término persona. Entonces, ¿cómo podemos tener dos cosas nombradas persona? ¿ Verdad? Entonces hay una forma de hacerlo donde la gente nombró a la interfaz. Yo persona. Creo que esto salió de Microsoft, pero estoy de pie por interfaz, por supuesto. Y entonces la clase real se llama persona. Algunas personas odian esto con una venganza, y lo que preferirían decir es que la interfaz debe nombrarse persona. Y entonces la clase se puede llamar como persona Simple, que significa implementación de persona, ¿no? Realmente no importa. Probablemente sea bueno escoger uno de estos estilos si sale de esta manera y seguirlo. Pero hay make you donde verás bastante estas dos convenciones de nomenclatura. De acuerdo, vamos a entrar en nuestro proyecto. Veamos este paso en acción por lo que vamos a añadir un nuevo requisito al proyecto. Vamos a tener dos tipos diferentes de tarjetas. Algunas cartas, mueven al jugador hacia adelante y algunos mueven al jugador hacia atrás Ahora, justo por cierto, declaré que eso debería empezar a gritarte polimorfismo, verdad? Cuando escuchas digo que hay dos tipos de tarjetas. Recuerda, la primera diapositiva del capítulo fue, A veces tenemos múltiples tipos de algo. Entonces aquí tenemos dos tipos de tarjeta de movimiento hacia adelante y tarjeta de movimiento hacia atrás, y tienen comportamientos diferentes. Se mueve el Pele o adelante Mamá mueve al jugador hacia atrás. De acuerdo, esto es gritar por una interfaz y por polimorfismo, ¿ verdad? Recuerda en el jugador cuando decimos Toma tu turno, él roba una baraja de la carta y dice, Head card movió esta pieza. Está bien. No quiero cambiar este código. Yo quiero que esto se mantenga muy genérico así. Se trata de un miembro. Mira esto. El jugador no sabe qué tipo de carta tiene no sabe si es hacia adelante o hacia atrás , ¿ verdad? El carnet lo sabe, y le dice a la carta se movió la paz y porque hay diferentes tipos de cartas, harán lo correcto, ¿verdad? Entonces pasemos a echar un vistazo a eso. En primer lugar, cómo vamos a retroceder. Esto suena como una pesadilla. ¿ Verdad? Entonces, ¿recuerdas cómo lo hicimos moviendo hacia adelante? Pediríamos la plaza dando tu siguiente plaza, y entonces eso sería un paso adelante. Y eso lo hacemos. Al igual que si la tarjeta tuviera un número cinco, lo hacemos cinco veces. Siguiente. Siguiente, siguiente, siguiente, siguiente, Y entonces estaríamos cinco anotaciones por delante. Entonces, ¿sólo vamos a seguir ese paradigma para ir hacia atrás? Vamos a pedir la plaza anterior. Um, así que eso en realidad es bastante fácil de configurar. Porque si el cuadrado número dos aquí es el siguiente cuadrado para el cuadrado número uno, eso significa que el cuadrado número uno es el cuadrado anterior para el cuadrado número dos, ¿ verdad? No hay excepciones a esa regla, siempre funciona de esta manera. Es como para aquellos de ustedes que conocen algunas estructuras de datos, es una lista doblemente, ya saben, doblemente vinculada. ¿ Verdad? Entonces, ¿cómo vamos a cambiar la clase cuadrada? ¿ Qué? Ya teníamos los siguientes atributos cuadrados. Vamos a sumar el cuadrado anterior como nuevos atributos. Y luego cuando pones aquí la siguiente plaza, tienes cuadrada uno y cuadrada toot, como justo al lado del otro en el mismo método. Entonces cuando decimos que el siguiente cuadrado es igual a siguiente. Simplemente podemos decir si esta plaza es la siguiente para mí, entonces yo soy la plaza anterior para él. Entonces lo voy a poner así, ¿verdad? Si piensas en esta codificación, lo miras y puedes diagramarlo o lo que quieras hacer. Puedes comprometerte a que esto funcione bien. De acuerdo, entonces vamos a entrar en el proyecto. Vamos a crear una interfaz de tarjetas, Dos tipos de tarjetas. Uh, esto está un poco involucrado otra vez. Por lo que te animo a seguir las instrucciones o si tienes mucha más confianza, solo puedes meterte en ello. Lo que haremos ahora de nuevo, como de costumbre, es tu video compuesto. Y luego cuando termines con tu proyecto, vuelve y caminaré por el proyecto contigo. Ahora bien, aunque no te guste seguirme conmigo en el proyecto, tal vez lo conseguiste trabajar con el dedo del pie. No te importa escuchar mi explicación. Eso está bien. Pero después de que hagamos eso, quedan algunas diapositivas más en este capítulo. Algunos temas más avanzados sobre interfaces. No olvides ver esas diapositivas. De acuerdo, así que asegúrate de volver después de la revisión del proyecto. Así que adelante y pausa ahora y luego volveremos juntos cuando termines, y hablaremos de ese proyecto. Está bien, bueno, bueno, bienvenido de nuevo. Vamos a hacer el proyecto. Entonces llamemos a nuestro pequeño podemos hacer que ese pequeñito sea un poco más grande. Aquí las instrucciones para este capítulo usando interfaces y habla de que vamos a tener dos tipos de tarjetas. Vamos a tener una tarjeta de avance en tarjeta de reversa. Um, también hace la excusa por adelantado. Vamos a tomar la tarjeta de la tarjeta de reenvío y simplemente copiarla en la tarjeta reversa y luego modificarla. Eso no es buena ingeniería de software. Pero no hay mucho que podamos hacer al respecto hasta el próximo capítulo cuando aprendamos una nueva sintaxis en Java que nos ayudará a deshacernos de todo el código duplicado. De acuerdo, así que vamos a probarlo. Hagámoslo. Cuartel reverso. Entonces primero vamos a hacer esa cosa de la que hablamos en las diapositivas y añadir la plaza anterior . ¿ Verdad? Por lo que dice que una propiedad cuadrada anterior y luego poner eso en el código extra en el centro. Por lo que tenemos siguiente plaza. Plaza privada, supongo. Cuadrado. Correcto. Y cuando pusimos la siguiente plaza, si esa plaza es mi siguiente palabra que yo soy esa plaza plaza anterior. Ahora vamos a necesitar getters y centros antes de hacer esto. ¿ Verdad? Casi se olvidó eso. Entonces, uh, segundo, déjame hacerlo. Tengo que hacer click derecho para decir fuente. General Motors y centros para plaza anterior puesto al final del expediente. Está bien, genial. Ahora mismo, podría volver a donde estaba, e iba a decir, Si ese siguiente marcador es mi siguiente plaza, entonces soy su plaza anterior. Entonces digo, siguiente plaza, ese es el anterior para mí. Y recuerdo, ¿cómo me refiero a mí mismo? ¿ Esto es correcto? Entonces este tipo de métodos eran tuyos Ya sabes, un cuadrado hablar con otro es un poco confuso a veces. Um, pero si piensas en si trabajas con eso, te convencerás de que esto es lo correcto Esperando a configurar esto. Muy bien, vamos al carro. Entonces queremos llevar todo el código que tenemos en el auto a clase ahora y ahora eso se convierte tarjeta de reenvío Así que la forma en que vamos a hacer esto es con el i d Factoring Fácilmente. Ahora, esto es un poco de que hay otras formas de hacer este trabajo. Quería mostrarte la herramienta re factoring. En realidad crea un poco de limpieza para nosotros como veremos a medida que pasemos por el proyecto. A lo mejor ya lo viste, pero , uh, es sólo una forma de hacerlo. Por lo que es un factor muy Renombrar tarjeta para ser auto Ford. O sea, podrías llamarla tarjeta de movimiento hacia adelante o algo así. Eso está bien. Como quieras llamarlo. De acuerdo, entonces ahora tenemos tarjeta de reenvío y notamos que cambió el nombre de la clase. También cambió. Um, el nombre del archivo en el sistema de archivos, si te veías así ahora es forward card dot Java, ¿ verdad? De lo contrario recuerda, no funciona si no tienes el mismo nombre. Y cualquier lugar que apareciera esa carta en el código también se ha cambiado a tarjetas reenviadas. Hizo como una búsqueda global. Y reemplazar básicamente Ok, Ahora necesitamos revertir tarjeta. Bueno, ahora hacemos el engaño, correcto, correcto, Así que puedo agarrar esta tarjeta de avance que puedo controlar. ¿ Ver? Para copiar. Y puedo controlar ser para pegarlo. Voy a decir auto de marcha atrás. De acuerdo, eso es mala programación que lo vamos a hacer este capítulo y el siguiente capítulo, te prometo que lo arreglarás. De acuerdo, Así que marcha atrás auto. Ups. ¿ Consíguelo? Consigue cada go. Y dice que lo que quieres hacer en la tarjeta de verso es en lugar de avanzar usando el siguiente cuadrado, quieres moverte hacia atrás usando el cuadrado anterior. Entonces realmente, todo lo demás aquí puede permanecer igual por ahora. Excepto que estamos cambiando este método a grupos anteriores. Ahora mismo, esta carta mueve las piezas hacia atrás en el tablero. Tipo de interesante. Está bien. Um, no, necesito actualizar la baraja porque ahora mismo, la baraja solo está creando cartas de avance. No podemos agregarle cartas inversas. Por lo que miran a la cubierta, se re factoring, tuvo algunas rachas aquí. Entonces si miro la lista de cartas en la lista para aquí, dice carta de avance, descartar carta de pila adelantada, caer enfermo. Por lo que no puedo agregar ninguna tarjeta inversa porque este es un tipo concreto. Quiero tener aquí un tipo genérico, así puedo agregar ambos tipos de tarjetas a mis listas. Correcto. Entonces aquí venimos, creando su interfaz de tarjetas. Está bien, la escuela esto abajo un poco. Muy bien, vamos a crear una tarjeta de interfaz, y luego vamos a tener que ambas de nuestra tarjeta de avance y reversa implementen la interfaz nuevo. Hay otras formas de hacer esto, pero, um, vamos sólo con este camino dirá nueva interfaz, acuerdo? Y ver que dice tarjeta de interfaz pública ahora. Está bien, genial. Y luego queremos conseguir nuestros estados de cuenta de implementación en implementa tarjeta y primeros momentos de tarjeta . Ahora, aviso. Por el momento, eso realmente no ha ganado tanto, porque recuerda, porque recuerda, dijimos que las interfaces están lejos para declarar firmas de métodos y mantener todo sincronizado. Aquí no hay firma de método. Es sólo tarjeta. De acuerdo, vamos a arreglar eso, claro. Pero lo que podemos hacer ahora en la baraja es que podemos ir y podemos hacer que estas vuelvan a cosas muy genéricas . Muy bien, entonces cambia ahora, estos aire roto porque, en realidad, um, aún no hemos hablado de genéricos, pero realmente no necesitas esto. Sólo saquemos esos y que no tendremos este problema nunca. de nuevo a partir de Java siete, creo que no necesitas poner el tipo dos veces. Si esta es una lista de cartas que esta es una lista de matriz de cartas. Eso lo sabe a partir de éste. Pero realmente no hemos hablado de genéricos. Está bien, genial. Entonces conseguimos todo esto, y ahora dice También, necesitamos arreglar el método de sorteo porque el método de sorteo es decir cartas de reenvío. Sí, tienes razón. Yo quiero poder devolver cartas hacia adelante y revertir. ¿ De acuerdo? Y mira aquí. Ahí hay otras cuatro cartas. Entonces de esto estaba hablando. Nuestro factoring re era un poco demasiado agresivo, y cambió todas estas cosas que en realidad no queríamos cambiar. Um, pero lo hizo de todos modos. De acuerdo, entonces ahora todo es americano. Hay un error en el jugador va a llegar a eso. Pero realmente no hemos creado ninguna tarjeta inversa de todo lo que estamos creando aquí son cartas de reenvío . Bueno, aquí hay otro lugar que va en contra de los consejos que teníamos en las diapositivas. ¿ Verdad? Realmente queremos sólo decir tarjeta. Está bien, Eso es un poco más genérico. Muy bien, Entonces lo que vamos a hacer los requisitos dicen que las tarjetas que son valor número cuatro deben ser tarjetas invertidas. Correcto. Entonces podemos hacer eso diciendo, vale, vale, si mira si el valor es igual a cuatro. De acuerdo, vamos a hacer una cosa, lo contrario vamos a hacer esto. Pero solíamos hacer tal vez quieras hacerlo al revés y decir si los valores no son iguales antes porque tipo de la tarjeta de reenvío es realmente el caso común, ¿ verdad? A lo mejor es poner el caso común en la parte superior. Ups. Perdón por eso. Y ahora solo queremos cambiar esto para revertir auto. ¿ De acuerdo? Ahora, tal vez quieras hacer un poco de re fábrica aquí. Ve que la gota que voy a dot add es la misma para ambos. Por lo que podrías sacar eso de la cuadra si quieres a Teoh. No nos preocupemos por eso ahora mismo. En realidad, lo hicieron aquí bajo esta luz. Entonces hagámoslo. Yo digo, Mira, ambos tienen un empate, pilas, no agregan. Entonces déjame mover eso aquí y ahora, porque somos el corte, el valor que la tarjeta variable se define dentro de estas llaves. Ya no es visible aquí fuera. El miembro del alcance del alcance en empleos entre llaves. Entonces no puedes No eres capaz de ver esta variable. Entonces en realidad tienes que ponerlo aquí arriba. Es tarjeta de tarjeta, ¿verdad? Y luego tuviste que usar esa variable en lugar de las que declaramos ahí. Entonces ahora ve cómo está destacando. Las cuatro de estas tarjetas se referían a esta misma variable exacta, ¿ verdad? tanto que antes lo eran, había una tarjeta individual dentro de cada uno de los dentro de cada uno de los bloques. De acuerdo, ¿alguien? En realidad no es de lo que estamos aquí para hablar. Lo cambiamos todo, um, para tener ahora algunas cartas inversas y algunas cartas anteriores. Y ahora tenemos que ir a la clase de jugadores y arreglar el error que estamos viendo ahí. ¿ Qué está pasando? Bueno, vale, lo primero que veo es como, Sí, mira, no quiero tarjetas de reenvío. Sólo son cartas. Y ahora va a decir: Bueno, Bueno, espera un minuto. Dice que no hay movimiento de culto de método en tarjeta tipo. Ahora podrías, y me sale esto en eclipse con solo flotar sobre la cosa roja. Por lo que en realidad no hemos vuelto nunca a este problema. En realidad no hemos agregado los métodos que necesitamos a la clase de cartas, ¿ verdad? O la interfaz de la tarjeta. Ahora, este es un poco genial. Solo puedo dar click en esto y que lo haga por mí, verdad? Recuerda que la mayoría de las cosas que teníamos en la ligera usaban la palabra público al frente. En realidad no es necesario que las interfaces hablen de eso cuando volvamos a las diapositivas. Pero ahora hemos agregado este método a la interfaz de tarjetas. Y ahora, si recuerdas, lo que debemos hacer es realmente debemos agregar esa anotación derecha anulación para solo marcar eso como, sí, este es un método de la interfaz Ven. Entonces si alguna vez volvemos atrás y echémosle un vistazo, si alguna vez por alguna razón elimino este método de la interfaz, conseguiré algunos. ¿ No fueron algunos errores aquí diciendo, Oye, dijiste que esto está anulando, pero no está bien ahora. Por supuesto, no quiero retomar eso, así que voy a dejarlo de nuevo dentro. ¿ Todo bien? Y ahora nos dan aliento Fin aquí número Paso 14 dice ejecutarlo y ver si funciona. Correcto. Está bien. Entonces recuerda, nuestro método principal está en lo siento. Juego correcto, Bien abajo. Escuchada arriba. Ahí está nuestro método principal. Voy a agarrar eso y vamos a ver si podemos conseguir que nos corran ya que nos hacemos algunos moviendo hacia atrás. No vamos a haber salvado clase. Perdón. Ahí vamos y vamos a ver si escogen citas cuatro patas. 563 11 4 Aquí vamos. Por lo que arrancando ronda dos jugador bota azul. Escoge los tres y se movió hasta la plaza 20 y No. Uno alrededor de las tres. El jugador azul escogió un cuatro y volví a la plaza 16. Está funcionando. Se puede ver a los jugadores para ver cualquier otra fuerza aquí. Todavía no. Eso es volver a ejecutar nuestra simulación y ver si vemos algún otro cuatro patas. Ninguno. Esta vez tuvieron mucha suerte. Vuelve a ejecutarlo. Todo está aleatorizado. Entonces aquí vamos. Ah, aquí hay una buena. Jugador. El verde comienza en. El primer carnet que recogen es un cuatro, por lo que tienen que moverse hacia atrás por la plaza 59 58 57 56. Por lo que ya están detrás de la plaza go en el primer turno. Por lo que probablemente verde perdió. Llegamos al final. El rojo estaba encendido para un azul está en 40 y el verde estaba en 19. Entonces Green recogió otros cuatro aquí. Eso es realmente desafortunado. Por lo que volvieron de nuevo. Entonces, sí, fueron bombeados en este juego. De acuerdo, espero que eso tenga sentido para el proyecto. Volvamos a la ligera, porque hay un poco más de lo que quiero hablarles de interfaces. De acuerdo, Entonces una cosa es que las interfaces se pueden heredar. Entonces volvamos a lo que teníamos en las diapositivas. ¿ Recuerdas la interfaz del método de contacto? Supongamos que teníamos otro. Contamos con método de contacto no autenticado donde tienes que iniciar sesión con la contraseña de nombre de usuario . Puedo tener esa interfaz extender el método de contacto. Entonces lo que eso significa es que este método de contacto autenticado de interfaz tiene todo lo que contacto Met Method tiene más estos nuevos métodos en definir aquí. Entonces, ¿qué significa eso si escribo una clase que implementa el contacto autenticado significaba que necesito hacer ambos de estos métodos. Necesito enviar mensaje desde método de contacto, y necesito iniciar sesión desde este, ¿ verdad? O de lo contrario obtendré esos errores del compilador para que en realidad puedas tener un todo. esto lo llamamos una jerarquía. Toda la jerarquía de interfaces de como una interfaz que se extiende otra se extiende otra, um, y combinada de diferentes maneras. Y luego puedes hacer que tus clases las implementen. Uh, como así Muy bien. Otra característica de las interfaces, que es algo nuevo en el trabajo. Un mundo vamos a configurar para prod el problema aquí supongamos que son nuestro proyecto de cartas en el que hemos estado trabajando era una plataforma de código abierto para construir juegos. Y tenemos mucha gente que está usando con muchos clientes programadores Teoh que descargaron y construyen todo tipo de juegos usando nuestro framework. Es genial, y una de las cosas que pueden hacer es porque tenemos una tarjeta en la cara. Pueden implementar carritos personalizados. Ya sabes, tenemos tarjeta de reversa de tarjeta de remate. A lo mejor se han saltado tarjetas y, uh, ya sabes, van a carceleros o quién sabe lo que podrían construir. Y entonces un día decidimos que queremos agregar algunos métodos más a esa interfaz. ¿ Qué va a pasar? El código de todos está roto, ¿verdad? Todos ellos de repente la próxima vez que descarguen la actualización a nuestro framework. De repente la interfaz de tarjetas tiene todos estos métodos extra que no tienen y todo su código no compilará. Está bien, así que no van a estar contentos co 14. 10 herencia: Muy bien, bienvenidos al Capítulo 10 sobre herencia. En el capítulo anterior, hemos visto cómo se conserva la interfaz como súper tipos polimórficos. Pero también podemos usar clases para el mismo propósito. Cuando hacemos esto, no hablamos de implementar interfaces. Hablamos de heredar de clases. Entonces cuando este capítulo mirará los trabajos, herencia de clases y algunos de los temas que vienen junto con él como clases abstractas, encadenamiento de constructores, anulación de métodos y varias otras características. Entonces, cuando estás usando interfaces, a veces conduce a una gran cantidad de implementación duplicada. Tomemos un ejemplo aquí con nuestra interfaz de tarjetas. Tiene un método get value y por lo tanto la tarjeta forward y la reverse card que implementan esa interfaz ambos necesitan tener un método get value. Ahora sabemos que se va a implementar de la misma manera ahí mismo. Ambos. Ambas son de estas clases. Vamos a tener ah, value atribuye uno privado, y luego tendremos un getter público get value, que devuelve esos atributos, y lo hacemos exactamente de la misma manera en ambas clases. Y si tuviéramos más clases que implementaran tarjeta, hacemos exactamente lo mismo una y otra vez, y eso no parece una solución satisfactoria. Entonces aquí estamos usando una clase de tarjeta abstracta como el súper apretado. Y así como una nota UML, esta línea sólida la línea aquí ha cambiado de discontinua en la diapositiva anterior a sólida aquí. Eso indica que el super tipo ahí, la tarjeta abstracta es una clase en lugar de una interfaz. Pero en este caso, lo que podemos hacer es porque estamos usando la clase como un super tipo, realidad podemos mover el código, olvidar el valor hacia arriba a esa clase, y podemos mover los atributos privados llamados valor hacia arriba a la clase. Y también podemos implementar el getter en esa clase. Y de esa manera, en las sub clases, en tarjeta de avance y reversa, podemos heredar ese método y en realidad no necesitamos escribirlo en esas clases. De acuerdo, entonces, ¿qué significa todo eso? Mucha jerga nueva aquí. Repasemos primero la jerga. De acuerdo, entonces aquí vemos, por el diagrama que vemos hay una comida súper tipo y ah, algo llamado Bar que está heredando de ella en este momento. Si pasamos por encima de ella y dejamos los términos generales son generalización y especialización, ¿no? Fu es más general. Bar es más especializado, pero la gente usa todo tipo de palabras para estos, así que lo hablarás. Se puede escuchar a la gente decir super tipo y subtipo con respecto al embargo alimentario. Su gente habla del padre y del niño, incluso del antepasado y del descendiente. Se oye todas esas palabras aire se utilizan bastante bien entre la implementación de la interfaz y la herencia de clases. Pero cuando estás hablando de herencia de clases, también puedes decir súper clase en subclase. Oficialmente, si la comida fuera una interfaz, no lo llamarías súper clase. Lo llamarías un súper tipo. A pesar de que diré que la gente de la industria utiliza todos estos términos de gráficos casi indistintamente. Pero yo sólo pensé como, ya sabes, que todos estos aires casi sinónimos ahora ¿Qué significa heredar de otra clase? Bueno, así es como se ve. Entonces a la izquierda se ve la clase de tarjeta abstracta y se ve justo como una clase normal. Tiene el valor inter y el getter get value, lo que devuelve eso después de Butte y luego con el fin de heredar de la clase en la clase de tarjeta forward . Aquí utilizamos la palabra clave se extiende y decimos extiende y luego el nombre de la super clase. Entonces se parece mucho a la implementación de interfaz, ¿verdad? Excepto antes dijimos implementos. Ahora decimos que se extiende a la derecha. En este caso, la corte abstracta es una súper clase. El card forward es la subclase, y dijimos que la tarjeta forward hereda el método get value. ¿ Qué significa eso exactamente? Entonces veamos esto. Creamos una tarjeta de avance de clase, ¿de acuerdo? Y luego tomamos esa tarjeta y podemos llamar a obtener valor en ella. Ahora, eso es muy interesante. Si retrocedemos cuando miramos la clase de tarjeta de avance, no hay un método llamado get value aquí. ¿ Verdad? Pero puedes hacer esto porque el método get value, pesar de que no existe en la clase de cuatro tarjetas D, existe en su super clase en la clase de tarjeta abstracta. ¿ Verdad? Entonces cuando haces esto, cuando dices card dot get value, el código que se está ejecutando es el código que en realidad está escrito en esta super clase en este caso llamado tarjeta abstracta. Y esto, por supuesto, será cierto para todas las sub clases en tarjeta abstracta. En nuestro caso, estamos hablando de reversa tarjeta, pero podría haber más y todos heredarían este método get value. Está bien, hablemos de cómo funciona aquí el polimorfismo. Entonces aquí tenemos tres declaraciones diferentes, y el 1er 1 por supuesto, está bien. Siempre puedes decir que la tarjeta de la tarjeta de reenvío es igual a la nueva tarjeta de avance. Cualquier objeto que puedas hacer de esta manera, como nombre de clase algo es igual a nuevo nombre de clase que siempre funciona. Pero de nuevo, podemos aplicar el polimorfismo aquí. Recuerda, esa tarjeta abstracta es la generalización o el super tipo. Por lo que podemos poner tarjeta abstracta aquí a la izquierda como el tipo de la variable. Y entonces podemos crear una tarjeta de reenvío, y eso funciona bien porque la tarjeta de lujo es un corazón abstracto. Se trata de un subtipo de tarjeta abstracta. Entonces esta es una declaración justa, pero no funciona al revés, ¿ verdad? Esto no va a compilar porque una tarjeta abstracta no es un auto delantero es una relación sólo funciona una dirección. Entonces esto es algo para recordar. Los tipos de tus variables, como aquí de la izquierda, siempre tienen que ser más generales que las clases reales, las clases específicas en las que estás, stan sheeting y en general y lenguajes orientados a objetos. Se quiere mantener los tipos de sus variables lo más generales que pueda, porque termina simplificando bastante el código y simplificando el mantenimiento. Pero la única vez en la que realmente necesitas dedo del pie en realidad especifica la subclase precisa que quieres usar es cuando llamas al constructor. No existe tal cosa como una llamada de constructor polimórfica. Tienes que escribir realmente el nombre de la clase que quieres que se cree aquí. Entonces esto es construcción. tiempo es la única vez en que realmente necesitas saber si se trata de un Carter delantero o una tarjeta inversa. Pero después de eso, solo podrías referirte a ella como una tarjeta abstracta, y debería hacer lo correcto. De acuerdo, anulando los métodos. Entonces digamos, aquí está mi tarjeta abstracta de clase abstracta y tiene este bonito método get value. Pero ahora tengo un caso en el que no quiero usar el comportamiento de la super clase, correcto. Yo quiero cambiarlo. Quiero hacer una tarjeta amañada que siempre devuelva un valor específico. Bueno, puedo hacer eso puedo anular ese método para que pueda simplemente escribir ese método de nuevo, público y obtener valor. Y ahora puedo devolver mi valor amañado. Por lo que esto siempre devuelve 42. Podría, por supuesto, poner cualquier implementación allí, y luego la etiqueté con la anotación de anulación para que el compilador pueda comprobarlo para asegurarse de que lo deletreé bien. Pero eso se llama anular un método. Y en cualquiera de las sub clases, siempre puedes decidir no usar la implementación de super clases para un método dado y escribir en una nueva implementación que quieras para esa clase solo ahora, en este caso, en el tarjeta de rig, tienes esta nueva tarjeta get value forward y reversa. Siguen usando el super classmethod de la tarjeta abstracta, ¿verdad? Esto no les afecta en absoluto. Está bien, ahora, con ah super clases y sub clases, hay algunas preguntas interesantes que surgen que no surgen cuando estás usando interfaces em y presta atención a ésta. Porque cuando vas a una entrevista, es muy probable que te hagan esta pregunta. Generalmente le hago a la gente esta pregunta todo el tiempo. Cuando los entreviste Pero veamos. Aquí hay cuatro casos diferentes. Bueno, quiero visitarme. Entonces digamos que digo que objeto alimenticio es igual a comida nueva y luego llamo objeto fuera print. Ahora note que ambos tienen un método de impresión, ¿verdad? Hay un método de impresión en la clase de comida que la comida príncipe. Y hay un método de impresión en la clase de bar que Prince bar y bar extiende Fu ¿verdad? Y lo he etiquetado con por aquí también. Cuando haga esto, ¿qué va a pasar? Bueno, creo que esa es bastante obvia. Va a imprimir comida, ¿verdad? Porque eso es lo que hacen los alimentos. Imprimen comida Ahora, ¿qué pasa con este? Yo digo que objeto alimenticio es igual a barra nueva. Y entonces digo, objetar esa huella. Piensa en eso. ¿ Eso va a imprimir comida, o eso va a imprimir barra? De acuerdo, Si dijiste bar, tienes razón ahora, ¿por qué es eso? Este es el realmente clave para entender. La clase del objeto que creó aquí es una barra porque dijo nueva barra Cuando hizo que el constructor te llamara, instruyó al tiempo de ejecución de Java para crear un objeto de barra. Esto es lo que objetos de bar dio derecho Aquí está la clase de bar. Entonces el hecho de que le diste la variable, el tipo de comida es algo irrelevante. Una forma de pensarlo es que los tipos de las variables son realmente para el compilador en el código fuente en la empresa, ya sabes, en el código fuente para el tiempo de compilación, pero en tiempo de ejecución, Lo que tienen son objetos como estos. Estas referencias de tipo no existen en tiempo de ejecución. De acuerdo, entonces lo clave aquí es que creaste un bar. Ahora, ¿y si lo hiciéramos al revés? Y dijimos que objeto de bar es igual a comida nueva. ¿ Qué sería esa impresión? Bueno, ojalá tus sentidos Spidey estén cosquilleando en esto porque eso no funciona bien? Ah, Fu no es un bar. Un bar es comida, ¿verdad? La comida no se extiende. Barra de bar extiende la comida y no puedes tener Fu extiende la corteza de la barra envía comida en un bucle infinito como ese. Al igual que eso tampoco va a funcionar. Entonces este es un truco que uno no funciona. Y entonces el último, creo, probablemente también sea bastante fácil. Si dices que el objeto de barra es igual a barra nueva, ¿qué va a imprimir? Bueno, eso va a imprimir barra, ¿verdad? Entonces el caso número dos es el que es el que debería, si tienes ese derecho, significa que entiendes el polimorfismo. Y eso es genial porque mucha gente, les lleva un tiempo dedo del pie. Averigúese ese fuera. Si no me crees, sigue adelante y escribe este código en eclipse o lo que sea que yo d Estás usando y juguetea con él y mira si puedes conseguir que funcione y ver qué pasa. De acuerdo, sólo una súper clase. Entonces, basado en esa última diapositiva, podrías estar pensando, Bueno, esto ya se está volviendo más complejo que interfaces que no teníamos este tipo de raro, uh, ya sabes, ¿ qué método ejecuta preguntas cuando estábamos usando interfaces? Y sí, eso es cierto. Es más complicado. Y si una subclase pudiera extender múltiples súper clases, entonces realmente comenzaría a ser confuso. Y hay lenguajes orientados a objetos como C plus, por ejemplo, donde puedes tener múltiples super clases y sí se pone realmente confuso. Y la forma en que resuelven esto en Java era simplemente decir, Ya sabes lo que solo puedes heredar de otra clase. Esta es una restricción fundamental del trabajo de máquina virtual. No se puede burlarlo. Entonces mientras que cuando implementas interfaces, puedes implementar tantas como quieras y solo puedes separarlas por comas. Entonces aquí tenemos clase Foo implementa una coma convertirse Ver puedes ir tantas como quieras. Tendrás que implementar todos esos métodos que se especifican en A B y C. Pero cuando amplías otra clase, cuando usas la herencia, solo obtienes un disparo. De acuerdo, así que solo puedes extender una súper clase. No se puede decir d común que no funcione. No importa lo bueno que seas. Tal vez estés preguntando, ¿Qué pasa con Chuck Norris? ¿ Puede extender múltiples clases? Y la respuesta es no, ni siquiera Chuck Norris puede hacerlo. Entonces esta es una limitación fundamental de java, De acuerdo, ¿ cuándo se debe usar la herencia? Ahora, contrariamente a la forma en que motivé esto aquí, no deberías usar la herencia estrictamente solo para reutilizar el código. Como si estás mirando dos clases y diciendo: Oh, Oh, mira, tienen el mismo método. Usemos la herencia. Esa no es la idea correcta. De acuerdo, Uh, solo úsalo cuando la subclase es un tipo de la super clase, ¿ verdad? cuando se puede decir que la tarjeta de reenviar es un tipo de tarjeta abstracta o un bar es un alimento o algo así, tiene que funcionar de esa manera. Y aún más estricto es lo que llaman el principio de sustitución de la lista Scott o también conocido como la regla del 100%. Y eso es decir que la subclase tiene que poder hacer el 100% de lo que hace la súper clase sin hacer que el cliente se asuste. ¿ Verdad? Entonces, ¿de qué en el mundo estoy hablando aquí? Entonces tomemos el ejemplo, Este es uno que fue un tema candente de discusión 20 Hace 25 años cuando la gente apenas se estaba metiendo en la orientación de objetos. Porque en matemáticas, siempre decimos, Bueno, Bueno, un cuadrado es un rectángulo, ¿ verdad? Y así podrías pensar de inmediato. De acuerdo, clase Goodman Square puede heredar de la clase rectángulo. Y la pregunta que quiero hacer aquí es como, ¿Es realmente una buena idea para la programación de objetos? Y voy a discutir aquí que nuevo eso no es buena idea. Y la razón es ésta. Echa un vistazo a este código. Digamos que tengo ah variable R, que se escribe como un rectángulo, así que sé que el objeto al que apunta es o bien un rectángulo o una de sus subclases , ¿ verdad? No lo sé, porque solo tengo rectángulo son y no necesito saberlo porque es polimórfico. ¿ Verdad? Entonces mira este abrigo, digo O lo consigo y saco la corriente con y luego digo son punto get area y saco el área actual y luego pongo el ancho del rectángulo al doble de la corriente con. Ahora bien, ¿qué crees que le va a pasar a la zona por lo que sabes de rectángulos? Bueno, si tomas un rectángulo el doble su con el área se dobla a la derecha. Pero, ¿y si ese rectángulo fuera en realidad un cuadrado? Supongamos que sí teníamos esta relación de herencia plaza un subtipo de rectángulo y es que era un rectángulo o igual a nuevo cuadrado. Y luego hicimos esto. Al duplicar el ancho de un cuadrado, la altura también se duplica en el área cuadruplica. De acuerdo, si este código aquí que está escrito en términos de rectángulos está esperando que el área se doble su va a ser realmente sorprendido cuando se cuádruple, y podría causarle realmente mal bug. Entonces, cuando estás pensando en relaciones polimórficas, relaciones superclase de subclase en un objeto durante un lenguaje de programación que no te puede gustar, ese es un conjunto diferente de restricciones que una especie de las restricciones matemáticas sobre. Ya sabes, Square sigue las mismas reglas que un rectángulo, y si quieres investigar más a fondo esto, si este tipo de intriga te, hay una práctica llamada Designed by Contract, que fue comenzó en este lenguaje de programación llamado Eiffel, donde puedes establecer lo que ellos llaman condiciones previas y condiciones de publicación básicamente contratos sobre los métodos, y puedes especificar a nivel de código fuente cómo esperas que tú y tus sub clases toe actuando. Se puede demostrar en ese caso que un cuadrado no satisfaría el contrato de un rectángulo. De acuerdo, no vamos a ir más allá aquí. Si eso es algo que te interesa, ve a buscar diseñado por contrato, el lenguaje de programación Eiffel, y es absolutamente fascinante si esto te parece interesante. Pero en términos de programación pragmática cotidiana, sí, realmente no necesitas sumergirte en OK, pero ahora puede que tengas una pregunta en tu mente. Es como, OK, OK, genial Así que tenemos que obtener el método de valor, que es tu implementación compartida, que toda la subclase usa. Pero y si tengo otro método que sea más como una interfaz donde quiero asegurarme de que todas mis sub clases tengan este método, Pero no puedo. No hay implementación predeterminada. Es realmente más como un método de interfaz. Entonces aquí estoy diciendo que Oh mi tarjeta, No, Con su especial o no, todos devuelven un booleano sobre el es método especial. Pero, ¿son especiales o inaudibles? Depende del tipo del carro, por lo que el método tiene que bajar en Thean Plantation del método tiene que bajar al tipo específico. Genial. Entonces, ¿cómo se hace eso? Bueno, eso es lo que llamamos métodos abstractos. De acuerdo, entonces tenemos un método abstracto aquí, y primero tenemos que marcar la clase como abstracta. Eso significa que la clase no está completa, y la razón por la que no está completa es que tenemos un método abstracto. Entonces aquí está la palabra clave abstracta sobre el método, que dice que estoy declarando este método, pero no tengo puntera de implementación le ofrezco Mira cómo termina con solo un punto y coma. Se ve exactamente como un método de interfaz, excepción de la palabra clave abstracta y en realidad, en una interfaz, todos los métodos o abstracto. Simplemente no tenemos que agregar el trabajo clave, porque cuando el compilador ve eso, es una interfaz que automáticamente los marca es abstracta. Pero en una clase sí tienes que decir abstracto, y llegamos a esto cuando tenemos un método en una clase que es abstracto, no hay implementación para ello. Entonces tenemos que marcar las clases abstractas para decirle al compilador. Oye, no puedes crear ninguno de estos porque si alguna vez llamaste es especial, no sabríamos qué hacer, ¿ verdad? Entonces cuando extiendes una clase nab Strack y ahora ves por qué llamé a la tarjeta abstracta de super clase , tienes que proporcionar implementaciones para todos los métodos abstractos. Si no crees que tienes que marcar tu propia clase como abstracta, así que digamos que no tenías en su especial aquí. Entonces dirías público abstracto clase aforo tarjeta se extiende tarjeta abstracta, pero tienes que hacer una u otra. Tienes que implementar las interfaces donde tienes que marcar tus clases abstractas. Entonces clases abstractas. ¿ Qué pasa con ellos? Entonces primero que nada ahí y son justo como interfaces en que no pueden ser. En cambio, ella se lo comió. De acuerdo, Sin embargo, hay diferentes a los subestados es interfaces en que pueden tener estado. Por lo que vimos en nuestra clase de tarjeta abstracta. Tiene esos atributos de valor y tiene un método llamado get value, que puede acceder a ese atributo al igual que una clase regular interfaces no puede hacer eso. De acuerdo, entonces las clases abstractas pueden tener métodos abstractos. Eso es igual que las interfaces. Y también pueden métodos concretos. El concreto es lo contrario de lo abstracto. Significa que el método que tiene una implementación, que es como métodos e interfaces predeterminados todavía hay una diferencia aquí. En esa interfaz, los métodos no pueden acceder a ningún estado del objeto, ¿ verdad? No tienen atributos como lo hacen las clases. Está bien. Ahora se podría escuchar la palabra jerarquía de herencia. Esta es una jerarquía de herencia, y ésta es una particularmente común donde en la parte superior de una interfaz. De acuerdo, digamos que nuestra tarjeta, uh, cuadro aquí representa una interfaz, y la interfaz especifica todos los métodos públicos que todo este todo el mundo en esta jerarquía necesita conformarse ahora el siguiente nivel hacia abajo. Tenemos una clase abstracta porque algunos de los métodos en este caso obtienen valor, tienen una implementación que es común en todas las subclases. Y así movimos el código común hacia arriba a la clase abstracta, por lo que solo se escribe una vez y luego en la parte inferior. Contamos con las clases concretas a especificadas que proporcionan todas las implementaciones específicas de los métodos que queden en este caso, método Theis Special, ¿ verdad? Y así, por cierto, volviendo a la terminología. Aquí es donde la gente usa ancestro y descendiente. Entonces desde el punto de vista, digamos una tarjeta inversa. El carnet es un antepasado, ¿verdad? Tarjeta abstracta es la tarjeta de clase padre es uno de sus antepasados y lo mismo de la tarjeta que el niño es tarjeta abstracta de clase abstracta, pero los descendientes son tarjeta de reenvío en tarjeta inversa um, descendientes. De verdad. decir, Esdecir,realmente es como un árbol genealógico, como todos tus Hijos y nietos y bisnietos son tus descendientes y tus padres y tus abuelos y tus bisabuelos son tus ancestros , y usamos las palabras de la misma manera un objeto durante eso, gente dirá, ya sabes, tu clase de padres grandes. A veces se oye a la gente decir que hay clase de nietos. Está bien, Nada de qué hablar es visibilidad. Ahora. Ahora hemos estado usando estas palabras clave públicas y privadas. Esos aire llamaron modificadores de nivel de acceso en el trabajo una mota. Cuando hablamos de herencia, estamos trayendo un Maurin que se llama Protegido. aún no lo hemos visto. lo vamos a ver en tan solo un minuto. ¿ Y para qué son estas cosas? Hemos burlado ese tema a través de esta clase hasta el momento, pero esto es una especie de, uh, uh, característica de seguridad que o bien otorga o bloquea el acceso al código, dependiendo de dónde se desliza el código de acceso. Muy bien, entonces veremos cómo funciona esto en la siguiente línea. Solo quiero que sepas que con lo que estoy a punto de mostrarte sobre visibilidad, aún hay más de qué hablar. Pero nosotros no. Sólo necesitamos hablar de público, privado y protegido en este momento. Pero en la siguiente parte, en la segunda parte de la clase. Bueno, hay otra manera. Hay otro nivel de acceso del que podemos hablar. De acuerdo, entonces aquí hay una clase con tres miembros, Sus atributos privados, protegidos en público. Ahora sólo he mostrado atributos aquí porque es más compacto poner en la diapositiva. Pero los métodos también pueden ser públicos, privados, protegidos. De acuerdo, así que esto va por cualquier cosa que esté dentro de una clase. Siempre se puede marcar con algún tipo de modificador de nivel de acceso. ¿ A qué se refieren? Muy bien, entonces es algo está marcado como privado que solo es visible desde el código dentro de la clase. Entonces ya ves como tenemos esta clase, alguna clase, y hay corsé rizado. Cualquier código que se escriba entre esas llaves puede ver esta variable. En realidad pueden acceder al valor del mismo, cambiar el valor del mismo, leer el valor mismo del mismo. Cualquier código que esté fuera de estas llaves, como en una clase diferente en algún lugar no puede tener acceso a esto. Entonces es, ah, ah, escondido dentro de su privado a esta clase. De acuerdo, por cierto, este miembro de la palabra que está algo así surgió de la nada. Tenemos atributos como este. Tenemos métodos por completo. esos aires llamados miembros cualquier tipo de entidad que viva dentro de la clase se le llama miembro de esa clase. Es una especie de término genérico. Muy bien, los miembros protegidos protegidos pueden ver son visibles para todos los que pueden ver métodos privados. Por lo que hay miembros. Todos son visibles dentro de las llaves de algunas clases dentro del alcance de esa clase. Pero los miembros protegidos también son visibles en las sub clases, ¿verdad? Entonces, si creas otra clase y dicha clase pública, mi clase extiende alguna clase, podrías acceder directamente al atributo de nombre que te será visible. Está bien. No serías capaz de acceder a los atributos de código ni siquiera como subclase porque es privado , Vale, y luego público es lo que podrías pensar. Es visible desde todas partes. Entonces, ya sea que estés en la clase o fuera de la clase de subclase o cualquier otra clase, podrías ver el atributo de nombre y podrías asignarle valores y leer el valor de la misma y cosas así. Por lo que utilizamos los modificadores de visibilidad. Tratamos de hacer que la mayor parte de nuestro estado sea privado porque generalmente el estado necesita mantenerse consistente, y no queremos que el código externo entre y manosee directamente con nuestro estado porque probablemente lo van a romper bien. Y cuando Estamos pensando en diseñar una clase que está destinada a ser sub clasificada. Utilizamos métodos protegidos y atributos protegidos bastante para que las subclases puedan acceder a los internos de la clase para cambiar su comportamiento. Correcto. Diseñar clases para ser sub clasificada robustamente es habilidad bastante avanzada. Y hay muchos libros que puedes leer sobre eso. Mucha literatura literaria por ahí. De acuerdo, eso es un montón de cosas. Um, todavía hay más de que hablar, pero tomemos un descanso aquí y vamos a hacer un poco de esto en nuestro proyecto para que lo veas funcionando. Y ojalá eso ayude a cementar un poco en tu cerebro. Por lo que dejamos nuestro proyecto en mal estado en que copiamos y pegamos el código de la tarjeta de reenvío en tarjeta reversa, y modificamos una línea. Esa es sólo una forma horrible de código Teoh. Arreglemos eso ahora, así que vamos a entrar al ejercicio. Lo que vamos a hacer es proporcionar una súper clase abstracta para las tarjetas, y vamos a mover todo ese código común hacia arriba a la súper clase abstracta para que no tengamos que tenerlo duplicado por todo el lugar. Está bien, es un poco complicado cómo hacer esto. Quizás así quieras seguir las notas de ejercicio si crees que puedes hacerlo sin eso, ten en ello. Um, y una vez que hayamos terminado, volveremos a las diapositivas, y hay algunos temas más que necesitamos cubrir. Entonces si no estás siguiendo con los ejercicios, asegúrate de quedarte con el video y avanzar un poco para llegar al resto de las diapositivas . Pero por ahora, vamos a entrar en mi I D. Que está aquí, Vale, no necesito las actualizaciones y echemos un vistazo a lo que dice Project. Entonces lo primero que vamos a hacer es mover los atributos de valor. Está bien, entonces aquí es donde ponemos el trabajo aquí. Vamos a crear un nuevo clásico, una clase llamada tarjeta abstracta. Vamos a implementar la interfaz de tarjetas. Uh, eso nos va a dar un montón más, y luego vamos a hacer un abstracto y luego engancharlo a las sub clases, así que eso es un buen trozo de trabajo para empezar. ¿ Vamos a crear la nueva clase llamada tarjeta abstracta? No, si lo estás si estás buscando, ves que yo podría poner la marca de verificación aquí y hacerlo abstracto. No voy a hacer eso solo porque quiero mostrarles algunas cosas en el editor a medida que vamos. Pero en general, probablemente seguirías adelante y harías eso. De acuerdo, entonces conseguimos tarjeta abstracta, y dijimos ¿Qué? Queremos que esto implemente auto. Muy bien, Genial. Y esperanzas Tarjeta de cumplidos. Y ahora obtenemos una gran línea roja difusa, y dice, uh, uh, corazón abstracto debe habitar en tener implementar el método abstracto heredado tarjeta dot Se mueve como, Bueno, no estoy listo por eso todavía, así que hagamos de esto una clase abstracta, ¿de acuerdo? Ahora se compila. Entonces esto es justo de lo que estamos hablando en las diapositivas. O tiene que implementar el método, o necesita declarar su tarjeta de revanzo abstracto de clase en tarjeta inversa. Ahora, en lugar de implementar tarjeta, se van a extender tarjeta abstracta. Y de nuevo hay una s ahí. Eso es correcto. Tarjeta. Está bien. Um, va a salvar eso. Ve a revertir tarjeta ahora. no necesitamos implementa tarjeta aquí porque tarjeta abstracta implementa tarjeta. De acuerdo, Entonces estamos en una jerarquía de herencia ahora, como vimos en las diapositivas. Y el hecho de que la tarjeta inversa se extiende abstracto Duro. Una tarjeta abstracta implementa tarjeta significa que la carta sigue siendo uno de nuestros supertipos ancestros, ¿ verdad? Por lo que no necesitamos volver a declararlo. Podría declararlo de nuevo en tarjeta diversa. Se podría decir, uh extiende duras mejoras de tarjeta abstracta. Pero eso es redundante. Y por lo general no lo verás. De acuerdo, vuelta a nuestras instrucciones aquí. Entonces lo hicimos y dice: ¿Qué código común podemos mover? Bueno, podemos mover los atributos de valor. Entonces es su atributo de valor de movimiento y eliminarlo de las clases de dos pasos. Entonces, en otras palabras, estamos hablando de esto aquí mismo estamos. Tarjeta diversa. Vamos a sacar esto Ahora. Esto va a romper un montón de cosas. Entonces pon eso ahí y vamos a reenviar tarjeta y decimos: Sí, Sí, no queremos eso. Esto es código duplicado. Vamos a deshacernos de él. Está bien, genial. ¿ Y dice quién? Creamos un montón de errores. Entonces, ¿de qué se trata el aire? Hay aire sobre el código de subclase que intenta acceder a ese valor, ¿ verdad? Entonces estamos diciendo Valor aquí. Valor aquí valoran su, pero ya no lo puede ver. ¿ Verdad? Um, entonces, ¿qué tenemos que hacer? Bueno, esto es porque lo dejamos como privado. Entonces uno cambia a protegido Di eso. Y ahora tenemos tarjeta de avance y tenemos tarjeta de verso y todo está funcionando Ahora hay otra cosa aquí que vemos. Y esto fue en las diapositivas de las que hablamos. También para obtener método de valor. Entonces vamos a mover eso también. Volvamos a subir a la tarjeta abstracta y tenemos este método get value. Y eso lo conseguimos ahí. Y luego lo podemos quitar de la tarjeta de reenvío también. De acuerdo, entonces ahora nos estamos deshaciendo de la duplicación. Eso fue trivial, pero aún así, es duplicación. Genial. Muy bien, el método de movimiento. Entonces esto es un poco más desafiante ahora. Lo que tenemos aquí es este método de movimiento en tarjeta de avance, y este método de movimiento en tarjeta inversa es exactamente el mismo. Excepto por esta llamada de método, ¿verdad? Y así no podemos moverlo a la super clase como está. Tenemos que lidiar de alguna manera con esto con esta variación. Eso es correcto. Smack dab medio en medio de nuestro método aquí y lo que están recomendando en el en el Klassen, está aquí. Notas de ejercicio es crear un nuevo método llamado Buscar el siguiente cuadrado, dada la puntuación actual. Entonces, ¿de qué estoy hablando aquí? Entonces voy a aquí. Tengo, um, um, resaltado este apartado. Voy a decir método extraído aquí. Veamos si puedo hacer que esto funcione método extraído. Llámala. Encuentra siguiente plaza. Está bien. Dice el método privado que se está llamando aquí, y luego puedo hacer lo mismo en clase Ford siguiendo muchos cuadrados. Entonces yo Ok, sé lo que encuentro es que esta clase en esta clase, uh, uh, este método de movimiento y este método de movimiento son exactamente los mismos. ¿ Verdad? Entonces dice hacer lo mismo en reversa cuadrada y comprobar que el método de movimiento sea exactamente el mismo. Y pasémoslo a la súper clase. Vale, Ahora, también puedes esperar que esto te vaya a dejar a algunos errores, ¿ verdad? Entonces Pero primero pongamos esto en marcha. Toma eso y vamos a tarjeta abstracta y ponemos el método de movimiento aquí arriba. Está bien. Genial. Bueno, entonces tenemos un problema enseguida. Bueno, aguanta antes de que hagamos eso. Lo tengo ahí. Bien. Tarjeta reversa. Saquemos el método de mudanza. Porque ahora está en el super cierre. Está bien. Se ve bien. Y esto es amarillo. Está diciendo, Hey, Hey, nadie llama nunca a este método y una tarjeta abstracta. Está diciendo que no sé cuál es este método. Entonces, ¿saben cuál es la respuesta a eso? Tenemos que poner un método abstracto en la super clase. Correcto. Entonces lo que estamos diciendo aquí es que todas las sub clases que vamos a necesitar para decirme cómo llegar a la siguiente plaza. A veces vas hacia adelante, a veces vuelves atrás. A lo mejor hay otras implementaciones que se te ocurra. Pero lo que vamos a hacer aquí está protegido porque queremos que esto sea visible en esta arriba clases cuadrado abstracto, bien. Siguiente plaza. Uh, cuadrado viniendo. Supongo que podríamos llamarlo posición. No importa. Está bien, genial. Entonces ahora mis clases de tarjeta abstracta ¿felices? Así es exactamente como lo harías. Pero ahora estos dos tipos estaban rotos. ¿ Qué se quejan de ello diciendo? Bueno, no se puede reducir la visibilidad. Entonces lo que eso significa es que este método está protegido. Uh, puedes hacer un protegido, puedes anular un método que está protegido con, um, mantenerlo protegido. O podrías hacerlo público. Pero no lo puedes ocultar. No se puede hacer privado. Por lo que necesitamos cambiar esto por protegido. No sabíamos eso cuando empezamos, pero está bien. Y mientras estamos en ello, eso decía la anulación solo para asegurarnos de que no lo estropeamos, vale, no se puso rojo. Entonces eso significa que lo hemos deletreado bien y lo mismo aquí. Hagamos esto protector y pongámoslo y encima aquí mismo. Está bien, bien. Entonces ahora tenemos todas estas cosas. Uh, tenemos el sobre una anotación. Ejecutemos nuestro juego solo para asegurarnos de que siga funcionando en que no rompimos nada. De acuerdo, ahí vamos. En miramos nuestra consola. Vemos que parece que está funcionando correctamente ahora que la técnica que usamos aquí, donde tú, um, creas un método abstracto, se llama desde la mitad del método super clase se llama. En realidad es un patrón de diseño llamado patrón de método de plantilla, donde el método de movimiento es el mismo para todas las sub clases. Pero hay un paso justo en medio, como cómo sabes cuál es la siguiente plaza a la que acudir. Eso varía de acuerdo a si se trata de una tarjeta de avance o de tu derecha marcada. Por lo que a esto se le llama el Método Template. Mover es un método de plantilla. Esto se llama puntajes de caída fina, llamado método gancho. Y luego en las sub clases implementas el método gancho, ¿ verdad? Entonces una es la plaza anterior cuando vas hacia atrás, si vas hacia adelante para ir a la siguiente plaza. Entonces ese es un objeto bastante astuto. Irán hizo implementación de este pequeño problema. Tenemos este complicado método de movimiento que ahora se encuentra en un solo lugar en la super Clase. No tenemos ningún corte y pegado, y la carta inversa en la carta de reenvío ahora contiene único. Muy bonito. Muy bien, volvamos atrás y terminemos nuestro ejercicio. Por lo que tenemos un par de temas más de los que hablar aquí. Entonces, antes que nada, um, una cosa que aún no limpiamos del todo son los instructores. Y eso es porque Dios habla de herencia constructora y cuál es el trato que los constructores no se heredan, ¿ verdad? Entonces aquí tenemos una clase de comida con el constructor, toma un entero y luego tenemos una clase de bar con extiende comida y queremos hacer algo como este para decir OK, es crear nueva barra y pasar el número cinco causa correcta tiene un constructor que lleva ileso, ¿verdad? Entonces eso debería funcionar no funciona, ¿verdad? Eso es error del compilador. Y de hecho, porque los constructores aire no heredado no importa qué constructores existan en la súper clase. El compilador mira la clase de bar. Dice, Oh, no supliste constructor. Entonces te daré un constructor por defecto. Recuerda que compilador genera para caer constructores. Eso es todo lo que tienes. Entonces no se puede pasar parámetros a Bueno, eso no es bueno, porque queremos que este valor de atributos tenga algo ahí. No debería ser sólo cero como queremos pasar algunos números en ella. ¿ Verdad? 15. 11 conclusión: De acuerdo, bienvenidos a la conclusión de la primera parte de Java Profesional, Capítulo 11. Por lo que felicitaciones. Terminaste la primera parte de esta serie de tres partes donde hablamos de java básica y orientación a objetos justo como una revisión solo para recordarte todas las cosas en las que trabajaste. Hiciste mucho trabajo duro en esta parte. Revisamos el trabajo de instalamos y repasamos la arquitectura básica y el ecosistema Java. Hablamos de entornos de desarrollo e instalamos uno de esos para nuestros proyectos después del hola World Project y un poco de revisión de los aspectos más destacados de sintaxis y jugueteando con eso, saltamos a la carne de la de esta parte la cual fue clases y diseño orientado a objetos que solíamos plantear. Utilizamos colecciones. Construimos llamadas polimórficas polimorfismo usando interfaces, y luego ampliamos eso para usar clases de herencia y abstractas. Por lo que hasta ahora has visto una gran fracción del poder orientado a objetos de Java. Si aún estás a bordo y quieres aprender alguna o la segunda parte trabajará en la mecánica de Java. Por lo que las características básicas del lenguaje que aún forman parte de la estructura del lenguaje pero que no son realmente orientados a objetos per se. Y luego un montón de las bibliotecas centrales que trabajan los barcos con algunas de las claves estarán mirando porque esos aires realmente integrales para tu trabajo diario. Entonces si eso te suena bien, te veré en la segunda parte. Y muchas gracias por llegar a través de la primera parte. De verdad lo aprecio. Espero que eso te haya sido interesante. Y ya nos vemos en la segunda parte.