<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Oscar olg</title>
    <description>The latest articles on DEV Community by Oscar olg (@oscarolg).</description>
    <link>https://dev.to/oscarolg</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3624607%2Fb2ace236-e846-45cd-9c85-d55f3bff1ecf.jpg</url>
      <title>DEV Community: Oscar olg</title>
      <link>https://dev.to/oscarolg</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/oscarolg"/>
    <language>en</language>
    <item>
      <title>Level Up Your Code: Why Object-Oriented Programming (OOP) is the Backbone of Game Dev</title>
      <dc:creator>Oscar olg</dc:creator>
      <pubDate>Fri, 26 Dec 2025 19:35:30 +0000</pubDate>
      <link>https://dev.to/oscarolg/level-up-your-code-why-object-oriented-programming-oop-is-the-backbone-of-game-dev-2434</link>
      <guid>https://dev.to/oscarolg/level-up-your-code-why-object-oriented-programming-oop-is-the-backbone-of-game-dev-2434</guid>
      <description>&lt;p&gt;This is a great topic for the Dev.to community! Developers there love practical, architectural insights that help them write cleaner code.&lt;/p&gt;

&lt;p&gt;If you’ve ever looked under the hood of a modern game engine like &lt;strong&gt;Unreal (C++)&lt;/strong&gt; or &lt;strong&gt;Unity (C#)&lt;/strong&gt;, you’ll find one common denominator: &lt;strong&gt;Object-Oriented Programming&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;While functional and data-oriented approaches are gaining traction, OOP remains the primary mental model for building complex, interactive worlds. In this post, we’ll explore how the four pillars of OOP translate directly into game mechanics.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Encapsulation: The "Black Box" of Game Entities
&lt;/h2&gt;

&lt;p&gt;In a game, an object (like a player or an enemy) shouldn't have its internal variables messed with by every other script in the project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Encapsulation&lt;/strong&gt; allows us to hide the internal state of an object and only expose what’s necessary through methods.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Example:&lt;/strong&gt; A &lt;code&gt;Player&lt;/code&gt; class has a private &lt;code&gt;health&lt;/code&gt; variable. Instead of letting an &lt;code&gt;Enemy&lt;/code&gt; script set &lt;code&gt;health = 0&lt;/code&gt;, the enemy calls a public method &lt;code&gt;TakeDamage(amount)&lt;/code&gt;. This allows the player to check for invincibility frames or armor buffs before the health is actually reduced.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Inheritance: Creating Hierarchies
&lt;/h2&gt;

&lt;p&gt;Why write the same code for a "Goblin," an "Orc," and a "Dragon" if they all share basic traits?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inheritance&lt;/strong&gt; lets us create a base &lt;code&gt;Enemy&lt;/code&gt; class with shared properties (Position, Health, Target) and then derive specific classes from it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Base Class:&lt;/strong&gt; &lt;code&gt;Enemy&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subclasses:&lt;/strong&gt; &lt;code&gt;ArcherEnemy&lt;/code&gt; (inherits Health but adds a &lt;code&gt;Range&lt;/code&gt; property) or &lt;code&gt;BossEnemy&lt;/code&gt; (inherits Health but adds a &lt;code&gt;PhaseTwo()&lt;/code&gt; method).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Polymorphism: One Interface, Many Behaviors
&lt;/h2&gt;

&lt;p&gt;This is where the magic happens. &lt;strong&gt;Polymorphism&lt;/strong&gt; allows a single function to behave differently depending on the object calling it.&lt;/p&gt;

&lt;p&gt;Imagine a &lt;code&gt;Weapon&lt;/code&gt; class with a method called &lt;code&gt;Fire()&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;Pistol&lt;/code&gt; object implements &lt;code&gt;Fire()&lt;/code&gt; by shooting a single raycast.&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;Shotgun&lt;/code&gt; object implements &lt;code&gt;Fire()&lt;/code&gt; by shooting five raycasts in a cone.&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;GrenadeLauncher&lt;/code&gt; implements &lt;code&gt;Fire()&lt;/code&gt; by spawning a physics-based projectile.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The "Inventory" script doesn't need to know what kind of weapon it's holding—it just calls &lt;code&gt;.Fire()&lt;/code&gt; and the object handles the rest.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Abstraction: Hiding the Complexity
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Abstraction&lt;/strong&gt; is about showing only the essential features of an object. In game dev, we use abstract classes or interfaces to define &lt;em&gt;what&lt;/em&gt; an object does without worrying about &lt;em&gt;how&lt;/em&gt; it does it.&lt;/p&gt;

&lt;p&gt;Think of an &lt;code&gt;IInteractable&lt;/code&gt; interface. Whether it’s a treasure chest, a door, or a friendly NPC, the player’s code only needs to know one thing: &lt;em&gt;Can I interact with this?&lt;/em&gt; If the object implements &lt;code&gt;IInteractable&lt;/code&gt;, the player can trigger it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary Table: OOP in Action
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pillar&lt;/th&gt;
&lt;th&gt;Game Dev Use Case&lt;/th&gt;
&lt;th&gt;Benefit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Encapsulation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Managing Player Health/Stats&lt;/td&gt;
&lt;td&gt;Prevents bugs and "spaghetti code."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inheritance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Creating Enemy Types&lt;/td&gt;
&lt;td&gt;Reduces code duplication (DRY).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Polymorphism&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Different Weapon/Ability behaviors&lt;/td&gt;
&lt;td&gt;Allows for modular, swappable systems.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Abstraction&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Interacting with world objects&lt;/td&gt;
&lt;td&gt;Simplifies logic for the Player Controller.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;OOP isn't just a set of rules; it’s a way to organize the chaos of a game world. By mastering these four pillars, you move from "writing scripts" to "architecting systems," making your games easier to debug, scale, and—most importantly—finish!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s your take?&lt;/strong&gt; Do you prefer pure OOP for your games, or are you moving toward an Entity Component System (ECS)? Let's discuss in the comments!&lt;/p&gt;

</description>
      <category>webdev</category>
    </item>
    <item>
      <title>Código Limpio: 5 principios para dejar de escribir "código espagueti"</title>
      <dc:creator>Oscar olg</dc:creator>
      <pubDate>Mon, 22 Dec 2025 06:05:12 +0000</pubDate>
      <link>https://dev.to/oscarolg/codigo-limpio-5-principios-para-dejar-de-escribir-codigo-espagueti-4k4b</link>
      <guid>https://dev.to/oscarolg/codigo-limpio-5-principios-para-dejar-de-escribir-codigo-espagueti-4k4b</guid>
      <description>&lt;p&gt;Introducción&lt;br&gt;
¿Alguna vez has regresado a un proyecto después de tres meses y no has entendido absolutamente nada de lo que escribiste? No estás solo. A todos nos ha pasado que, por las prisas, terminamos creando funciones gigantes y archivos interminables.&lt;/p&gt;

&lt;p&gt;Hoy vamos a hablar de los principios SOLID, una guía esencial para cualquier desarrollador que quiera pasar de "hacer que funcione" a "crear software profesional".&lt;/p&gt;

&lt;p&gt;¿Qué es SOLID?&lt;br&gt;
SOLID es un acrónimo acuñado por Robert C. Martin ("Uncle Bob"). Son cinco reglas que nos ayudan a que nuestro código sea fácil de entender, extender y mantener.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;S: Responsabilidad Única (Single Responsibility)
La regla: Una clase o función debe tener una, y solo una, razón para cambiar.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Error común: Crear una función que valida un formulario, guarda en la base de datos y envía un email.&lt;/p&gt;

&lt;p&gt;Solución: Divide esa función en tres pequeñas funciones independientes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;O: Abierto/Cerrado (Open/Closed)
La regla: El software debe estar abierto para su extensión, pero cerrado para su modificación.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Esto significa que deberías poder agregar nuevas funcionalidades sin tener que reescribir el código que ya existe y que ya funciona.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;L: Sustitución de Liskov (Liskov Substitution)
La regla: Si tienes una clase hija, deberías poder usarla en lugar de la clase padre sin que nada se rompa.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Si Pájaro tiene un método volar(), pero creas una clase Pingüino, ¡ten cuidado! Un pingüino no vuela. Aquí es donde el diseño debe ser preciso.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I: Segregación de Interfaz (Interface Segregation)
La regla: Es mejor tener muchas interfaces específicas que una sola interfaz general.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No obligues a una clase a implementar métodos que no necesita. Mantén tus contratos de código "ligeros".&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;D: Inversión de Dependencias (Dependency Inversion)
La regla: Depende de abstracciones, no de clases concretas.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;En lugar de que tu lógica dependa directamente de una base de datos específica (como MySQL), haz que dependa de una "interfaz" de base de datos. Así, si mañana cambias a MongoDB, tu lógica principal no cambia.&lt;/p&gt;

&lt;p&gt;Conclusión&lt;br&gt;
Aplicar estos principios al principio puede parecer que "escribe más código", pero a largo plazo, te ahorra horas de debugging y frustración. Recuerda: escribimos código para humanos, no solo para máquinas.&lt;/p&gt;

&lt;p&gt;¿Cuál de estos principios te parece más difícil de aplicar? ¡Déjame un comentario abajo! 👇&lt;/p&gt;

</description>
      <category>programming</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Tutorial sobre como crear objetos en javascript con programación orientada a objetos</title>
      <dc:creator>Oscar olg</dc:creator>
      <pubDate>Fri, 19 Dec 2025 04:29:56 +0000</pubDate>
      <link>https://dev.to/oscarolg/tutorial-sobre-como-crear-objetos-en-javascript-con-programacion-orientada-a-objetos-icg</link>
      <guid>https://dev.to/oscarolg/tutorial-sobre-como-crear-objetos-en-javascript-con-programacion-orientada-a-objetos-icg</guid>
      <description>&lt;p&gt;En JavaScript moderno, utilizamos la palabra clave &lt;code&gt;class&lt;/code&gt; (introducida en ES6) para crear moldes de objetos. Aquí tienes una guía paso a paso.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. La Estructura de una Clase
&lt;/h2&gt;

&lt;p&gt;Imagina que una &lt;strong&gt;clase&lt;/strong&gt; es el plano arquitectónico y el &lt;strong&gt;objeto&lt;/strong&gt; es la casa ya construida.&lt;/p&gt;

&lt;h3&gt;
  
  
  Componentes clave:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Constructor:&lt;/strong&gt; Una función especial que se ejecuta automáticamente al crear un objeto. Sirve para inicializar propiedades.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Propiedades:&lt;/strong&gt; Son las características (variables) del objeto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Métodos:&lt;/strong&gt; Son las acciones (funciones) que el objeto puede realizar.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ejemplo de código:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Persona&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// El constructor define qué datos necesita el objeto al nacer&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// "this" se refiere al objeto que estamos creando&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;edad&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// Esto es un método (una acción)&lt;/span&gt;
  &lt;span class="nf"&gt;saludar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Hola, mi nombre es &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; y tengo &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; años.`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Crear una "instancia" (un objeto real basado en la clase)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;usuario1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Persona&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Ana&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;usuario2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Persona&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Luis&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;usuario1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;saludar&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Salida: Hola, mi nombre es Ana y tengo 28 años.&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Los 4 Pilares de la POO en JavaScript
&lt;/h2&gt;

&lt;p&gt;Para dominar los objetos, debes conocer estos conceptos:&lt;/p&gt;

&lt;h3&gt;
  
  
  A. Encapsulamiento (Privacidad)
&lt;/h3&gt;

&lt;p&gt;A veces no quieres que nadie modifique los datos internos de un objeto directamente. En JS moderno, usamos el símbolo &lt;code&gt;#&lt;/code&gt; para hacer propiedades privadas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CuentaBancaria&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="nx"&gt;saldo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Propiedad privada&lt;/span&gt;

  &lt;span class="nf"&gt;depositar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cantidad&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="nx"&gt;saldo&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;cantidad&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;verSaldo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`Tu saldo es de $&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="nx"&gt;saldo&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  B. Herencia
&lt;/h3&gt;

&lt;p&gt;Permite que una clase "hija" herede propiedades y métodos de una clase "padre". Se usa la palabra clave &lt;code&gt;extends&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nf"&gt;comer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; está comiendo.`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Perro&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;ladrar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;¡Guau guau!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;miPerro&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Perro&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Firulais&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;miPerro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;comer&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Heredado de Animal&lt;/span&gt;
&lt;span class="nx"&gt;miPerro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ladrar&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Propio de Perro&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  C. Polimorfismo
&lt;/h3&gt;

&lt;p&gt;Es la capacidad de que diferentes clases respondan al mismo método de formas distintas. Por ejemplo, tanto un &lt;code&gt;Gato&lt;/code&gt; como un &lt;code&gt;Perro&lt;/code&gt; pueden tener un método &lt;code&gt;hablar()&lt;/code&gt;, pero uno maúlla y el otro ladra.&lt;/p&gt;

&lt;h3&gt;
  
  
  D. Abstracción
&lt;/h3&gt;

&lt;p&gt;Consiste en ocultar los detalles complejos y mostrar solo lo necesario al usuario del objeto.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Resumen rápido
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concepto&lt;/th&gt;
&lt;th&gt;Descripción&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Clase&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;El molde o plantilla.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Objeto&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;La instancia real creada con &lt;code&gt;new&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Constructor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Método que asigna valores iniciales.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;this&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Palabra clave que apunta al objeto actual.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;¡Genial! Vamos a construir un &lt;strong&gt;Sistema de Personajes de Videojuego&lt;/strong&gt;. Este ejemplo es perfecto porque permite ver cómo la herencia y los métodos funcionan en un entorno real.&lt;/p&gt;




&lt;h2&gt;
  
  
  El Proyecto: Arena de Combate
&lt;/h2&gt;

&lt;p&gt;Diseñaremos una clase base llamada &lt;code&gt;Personaje&lt;/code&gt; y luego crearemos clases específicas para un &lt;code&gt;Mago&lt;/code&gt; y un &lt;code&gt;Guerrero&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Definir la clase base
&lt;/h3&gt;

&lt;p&gt;Primero, creamos el molde general con lo que todos los personajes tienen en común: nombre, salud y un método para atacar.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Personaje&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;salud&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;salud&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;salud&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;recibirDanio&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cantidad&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;salud&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="nx"&gt;cantidad&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; recibió &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;cantidad&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; de daño. Salud restante: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;salud&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;salud&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; ha sido derrotado.`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Aplicar Herencia y Polimorfismo
&lt;/h3&gt;

&lt;p&gt;Ahora creamos las clases especializadas. Usaremos &lt;code&gt;super()&lt;/code&gt; para llamar al constructor del padre.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Guerrero&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Personaje&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// El guerrero tiene más vida inicial&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fuerza&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// Método único del Guerrero&lt;/span&gt;
  &lt;span class="nf"&gt;ataqueCuerpoACuerpo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;objetivo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; golpea con su espada a &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;objetivo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;objetivo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recibirDanio&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fuerza&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Mago&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Personaje&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// El mago tiene menos vida&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mana&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// Método único del Mago&lt;/span&gt;
  &lt;span class="nf"&gt;lanzarHechizo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;objetivo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mana&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; lanza una bola de fuego a &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;objetivo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mana&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nx"&gt;objetivo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recibirDanio&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; no tiene suficiente maná.`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Pongámoslo a prueba
&lt;/h2&gt;

&lt;p&gt;Copiando y pegando este código en tu consola de JavaScript (F12 en el navegador), puedes ejecutar esta simulación:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 1. Instanciamos a nuestros héroes&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;aragorn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Guerrero&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Aragorn&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;gandalf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Mago&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Gandalf&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// 2. Comienza el duelo&lt;/span&gt;
&lt;span class="nx"&gt;gandalf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lanzarHechizo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;aragorn&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;aragorn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ataqueCuerpoACuerpo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;gandalf&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// 3. Revisamos el estado final&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;aragorn&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;gandalf&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ¿Qué aprendimos aquí?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;super()&lt;/code&gt;&lt;/strong&gt;: Es obligatorio cuando usas &lt;code&gt;extends&lt;/code&gt;. Le dice a JavaScript: "Primero configura las propiedades básicas que vienen del padre".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Especialización&lt;/strong&gt;: El &lt;code&gt;Mago&lt;/code&gt; tiene &lt;code&gt;mana&lt;/code&gt;, pero el &lt;code&gt;Guerrero&lt;/code&gt; no. Esto mantiene el código limpio.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interacción&lt;/strong&gt;: Los objetos pueden interactuar entre sí pasando una instancia (como &lt;code&gt;aragorn&lt;/code&gt;) como argumento a los métodos de otro objeto (&lt;code&gt;gandalf.lanzarHechizo(aragorn)&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>javascript</category>
      <category>poo</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>🚀 La IA: El Nuevo Amanecer de la Mente Humana (¡Y No, No es el Fin del Mundo!)</title>
      <dc:creator>Oscar olg</dc:creator>
      <pubDate>Mon, 15 Dec 2025 05:23:55 +0000</pubDate>
      <link>https://dev.to/oscarolg/la-ia-el-nuevo-amanecer-de-la-mente-humana-y-no-no-es-el-fin-del-mundo-56lm</link>
      <guid>https://dev.to/oscarolg/la-ia-el-nuevo-amanecer-de-la-mente-humana-y-no-no-es-el-fin-del-mundo-56lm</guid>
      <description>&lt;p&gt;¡Hola a todos! Soy yo, su guía favorito a través de las fronteras de la ciencia y la tecnología. Si hay un tema que ha dominado las conversaciones, los titulares y, seamos honestos, incluso nuestras pesadillas, es la Inteligencia Artificial (IA).&lt;/p&gt;

&lt;p&gt;Pero, ¿qué es exactamente esta fuerza misteriosa? ¿Es una entidad mágica? ¿Un robot malvado? ¿O quizás solo una herramienta increíblemente poderosa? Vamos a despojarla de mitos y a celebrar la revolución que ya está en marcha.&lt;/p&gt;

&lt;p&gt;🤔 ¿Qué Demonios es la IA, Realmente?&lt;br&gt;
Olvídate de Terminator por un segundo. La IA, en su esencia, es la ciencia de hacer que las computadoras hagan cosas que, hasta hace poco, requerían la inteligencia humana. No es replicar la conciencia, sino replicar ciertas habilidades cognitivas.&lt;/p&gt;

&lt;p&gt;La estrella del show en este momento es el Aprendizaje Automático (Machine Learning o ML). Piensa en esto:&lt;/p&gt;

&lt;p&gt;💡 En lugar de programar una computadora con reglas rígidas (si X, entonces Y), le damos una montaña de datos y le permitimos aprender patrones por sí misma. Es como enseñarle a un niño a reconocer un gato mostrándole miles de fotos de gatos, no dándole una fórmula matemática para el bigote.&lt;/p&gt;

&lt;p&gt;Dentro del ML, tenemos al superhéroe del momento: el Aprendizaje Profundo (Deep Learning). Este usa redes neuronales artificiales con múltiples capas (de ahí lo de "profundo") para manejar datos complejos como imágenes, voz y, por supuesto, el lenguaje natural que estás leyendo ahora.&lt;/p&gt;

&lt;p&gt;🌐 Tres Pilares que Sostienen la Revolución&lt;br&gt;
La IA no despegó de repente. Su explosión actual se debe a una conjunción perfecta de tres factores:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;El Tsunami de Datos (Big Data)&lt;br&gt;
Cada clic, cada compra, cada foto y cada palabra que escribimos son datos. El universo digital nos ha inundado con la materia prima que la IA necesita para "alimentarse" y hacerse más inteligente.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;El Músculo Computacional&lt;br&gt;
Gracias a la Ley de Moore y, crucialmente, al uso de GPUs (unidades de procesamiento gráfico), tenemos una capacidad de cálculo antes inimaginable. Podemos entrenar modelos gigantescos en días, algo que hace una década habría tardado años.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Los Algoritmos Elegantes&lt;br&gt;
Los científicos e ingenieros han desarrollado arquitecturas como los Transformers y los Generative Adversarial Networks (GANs). Estos son los "motores de Ferrari" que convierten los datos masivos y la potencia de cálculo en resultados espectaculares.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🔮 El Impacto: Más Allá de los Chatbots&lt;br&gt;
La IA no es solo ese generador de texto o imágenes que te asombra en internet. Su verdadero poder reside en transformar sectores completos:&lt;/p&gt;

&lt;p&gt;Medicina: Diagnósticos de cáncer más rápidos y precisos que el ojo humano. Descubrimiento acelerado de nuevos medicamentos y terapias personalizadas.&lt;/p&gt;

&lt;p&gt;Ciencia: Analizando la vastedad del universo o doblando proteínas para curar enfermedades (como AlphaFold).&lt;/p&gt;

&lt;p&gt;Industria: Optimización de cadenas de suministro, reducción del despilfarro y mantenimiento predictivo en fábricas.&lt;/p&gt;

&lt;p&gt;Arte y Creatividad: Desde componer música hasta generar guiones o diseñar productos en minutos. La IA es ahora una herramienta de co-creación.&lt;/p&gt;

&lt;p&gt;⚠️ El Gran Desafío (Y la Gran Oportunidad)&lt;br&gt;
Sí, el miedo al desempleo es real, pero la historia tecnológica nos enseña algo: la tecnología no elimina trabajos, sino que los transforma. La IA automatizará tareas repetitivas, pero creará una demanda exponencial de roles centrados en la supervisión de la IA, la ética de datos, el diseño de prompts y la creatividad humana.&lt;/p&gt;

&lt;p&gt;Nuestro desafío como sociedad no es frenarla, sino:&lt;/p&gt;

&lt;p&gt;Garantizar la Equidad: Asegurarnos de que los modelos no perpetúen sesgos existentes en los datos (raciales, de género, etc.).&lt;/p&gt;

&lt;p&gt;Regular la Transparencia: Necesitamos saber por qué una IA tomó una decisión (la llamada "IA Explicable").&lt;/p&gt;

&lt;p&gt;Fomentar la Alfabetización: Todos debemos entender cómo funciona esta herramienta para poder usarla de manera responsable y potente.&lt;/p&gt;

&lt;p&gt;🌟 En Conclusión: Es Hora de Sentarse al Volante&lt;br&gt;
Estamos en el punto de inflexión. La IA no es algo que está "llegando"; ya está aquí, incrustada en nuestros teléfonos, nuestros coches y nuestros sistemas de salud.&lt;/p&gt;

&lt;p&gt;No la veas como un competidor. Vela como un motor que multiplica tu propia inteligencia y potencial. El futuro no será dominado por la IA, sino por los humanos que saben cómo trabajar con la IA.&lt;/p&gt;

&lt;p&gt;Así que, respira hondo, abraza el cambio y prepárate para crear cosas que hasta hace poco eran pura ciencia ficción. ¡La mente humana, potenciada por el silicio, está lista para reescribir las reglas!&lt;/p&gt;

&lt;p&gt;¿Qué te parece? ¿Querrías que profundicemos en el impacto de la IA en algún sector específico, como la educación o la ciberseguridad?&lt;/p&gt;

</description>
      <category>terraform</category>
    </item>
    <item>
      <title>Temario de Inteligencia Artificial Avanzada</title>
      <dc:creator>Oscar olg</dc:creator>
      <pubDate>Tue, 09 Dec 2025 06:14:09 +0000</pubDate>
      <link>https://dev.to/oscarolg/temario-de-inteligencia-artificial-avanzada-50lg</link>
      <guid>https://dev.to/oscarolg/temario-de-inteligencia-artificial-avanzada-50lg</guid>
      <description>&lt;p&gt;Este repositorio contiene un plan de estudios completo y recursos para un curso avanzado de IA, enfocado en las fronteras de la investigación moderna.&lt;/p&gt;

&lt;p&gt;Cubre temas esenciales como el Deep Learning (aprendizaje profundo), los modelos generativos, la IA ética y el diseño de sistemas multi-agente.&lt;/p&gt;

&lt;p&gt;El objetivo es proporcionar una base sólida para que los estudiantes y profesionales puedan desarrollar e implementar sistemas de IA sofisticados y responsables.&lt;br&gt;
&lt;a href="https://github.com/webmastervetea/advanced-ai-curriculum/blob/main/modulos-1-20.md" rel="noopener noreferrer"&gt;Temario de Inteligencia Artificial&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ia</category>
    </item>
    <item>
      <title>💡 ¡No Más Sueños Digitales! Convierte tus Ideas en Realidad con el Desarrollo Web</title>
      <dc:creator>Oscar olg</dc:creator>
      <pubDate>Sat, 06 Dec 2025 11:44:12 +0000</pubDate>
      <link>https://dev.to/oscarolg/no-mas-suenos-digitales-convierte-tus-ideas-en-realidad-con-el-desarrollo-web-2e29</link>
      <guid>https://dev.to/oscarolg/no-mas-suenos-digitales-convierte-tus-ideas-en-realidad-con-el-desarrollo-web-2e29</guid>
      <description>&lt;p&gt;¿Estás Listo para Dejar de Consumir y Empezar a Crear en Internet?&lt;br&gt;
Cada día, interactuamos con decenas de páginas web y aplicaciones. Detrás de cada diseño increíble, cada botón que funciona y cada experiencia fluida, hay un desarrollador. ¿Alguna vez te has preguntado "¿Cómo se hizo esto?"?&lt;/p&gt;

&lt;p&gt;Si tienes curiosidad, si te gusta resolver problemas, o si simplemente quieres una habilidad que te abra un mundo de oportunidades laborales y creativas, el momento de empezar tu viaje en el Desarrollo Web es AHORA.&lt;/p&gt;

&lt;p&gt;🛠️ La Habilidad Que Conecta Todas las Industrias&lt;br&gt;
El desarrollo web no es solo un trabajo; es un superpoder en la economía digital.&lt;/p&gt;

&lt;p&gt;Libertad Creativa: Desde lanzar tu propio blog o portafolio, hasta crear una aplicación que resuelva un problema real, ser desarrollador te da las herramientas para construir exactamente lo que imaginas.&lt;/p&gt;

&lt;p&gt;Oportunidad Profesional: En la actualidad, toda empresa necesita presencia digital. Esto se traduce en una demanda constante y creciente de profesionales con habilidades en HTML, CSS y JavaScript. El desarrollo web es una de las carreras más estables y mejor remuneradas de la última década.&lt;/p&gt;

&lt;p&gt;Flexibilidad: Muchos desarrolladores tienen la opción de trabajar de forma remota o freelance, ofreciendo una flexibilidad de estilo de vida inigualable.&lt;/p&gt;

&lt;p&gt;🧱 Los Pilares Fundamentales: HTML, CSS y Flexbox&lt;br&gt;
Nuestro curso está diseñado para que te sientas cómodo desde el primer día, enfocándonos en lo esencial:&lt;/p&gt;

&lt;p&gt;HTML5 (La Estructura): Aprenderás el lenguaje base que da forma a todo. Es como construir el esqueleto de tu página.&lt;/p&gt;

&lt;p&gt;CSS (El Estilo y la Belleza): Dejarás de lado las páginas aburridas para dar vida a tus diseños con colores, tipografía y efectos visuales.&lt;/p&gt;

&lt;p&gt;Flexbox (La Maquetación): Dominarás el arte de organizar el contenido en la pantalla, asegurando que tu sitio se vea perfecto, sin importar si el usuario usa un móvil o un monitor grande. ¡Di adiós a los elementos desordenados!&lt;/p&gt;

&lt;p&gt;🎯 Empieza con la Práctica, No con la Teoría&lt;br&gt;
Sabemos que la mejor manera de aprender es haciendo. Por eso, en lugar de largas lecturas, nos centraremos en:&lt;/p&gt;

&lt;p&gt;Ejemplos Prácticos: Construiremos componentes reales como una Tarjeta de Perfil y una Barra de Navegación moderna.&lt;/p&gt;

&lt;p&gt;Diseño Responsivo: Te enseñaremos a codificar pensando en el móvil primero, un requisito sine qua non en el desarrollo moderno.&lt;/p&gt;

&lt;p&gt;Primeros Pasos en JavaScript: Añade interactividad real y da el salto de una página estática a una aplicación dinámica.&lt;/p&gt;

&lt;p&gt;🔥 Tu Próximo Gran Paso Comienza Hoy&lt;br&gt;
No importa si vienes de una carrera completamente diferente. Si tienes las ganas y la dedicación, el mundo del Desarrollo Web está abierto para ti.&lt;/p&gt;

&lt;p&gt;Es hora de dejar de ser un espectador y convertirte en un constructor del internet.&lt;/p&gt;

&lt;p&gt;¿Estás listo para darle vida a tu primera gran idea?&lt;/p&gt;

&lt;p&gt;➡️ &lt;a href="https://github.com/webmastervetea/tutorial-completo-de-desarrollo-web/tree/main" rel="noopener noreferrer"&gt;https://github.com/webmastervetea/tutorial-completo-de-desarrollo-web/tree/main&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🐍 Guía Paso a Paso para Instalar Python</title>
      <dc:creator>Oscar olg</dc:creator>
      <pubDate>Mon, 01 Dec 2025 05:22:32 +0000</pubDate>
      <link>https://dev.to/oscarolg/guia-paso-a-paso-para-instalar-python-4mbj</link>
      <guid>https://dev.to/oscarolg/guia-paso-a-paso-para-instalar-python-4mbj</guid>
      <description>&lt;p&gt;Python es uno de los lenguajes de programación más populares. A continuación, te mostramos cómo instalar la última versión estable en tu sistema.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 1: Descargar el Instalador de Python
&lt;/h3&gt;

&lt;p&gt;Ve al sitio web oficial de Python: &lt;strong&gt;&lt;a href="https://www.python.org/downloads/" rel="noopener noreferrer"&gt;https://www.python.org/downloads/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El sitio web automáticamente detectará tu sistema operativo y te ofrecerá el botón de descarga para la &lt;strong&gt;última versión&lt;/strong&gt; de Python (por ejemplo, Python 3.12.x).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Haz clic en el botón &lt;strong&gt;"Download Python..."&lt;/strong&gt; para iniciar la descarga del instalador.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Paso 2: Instalación en Windows 💻
&lt;/h3&gt;

&lt;p&gt;Si estás usando &lt;strong&gt;Windows&lt;/strong&gt;, sigue estos pasos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Ejecuta el Instalador:&lt;/strong&gt; Busca el archivo que descargaste (generalmente llamado algo como &lt;code&gt;python-3.x.x.exe&lt;/code&gt;) y haz doble clic para ejecutarlo.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Configuración Crucial:&lt;/strong&gt; En la primera ventana del instalador, es &lt;strong&gt;MUY IMPORTANTE&lt;/strong&gt; que marques la casilla que dice:
&amp;gt; &lt;strong&gt;"Add python.exe to PATH"&lt;/strong&gt;
&amp;gt; Marcar esta casilla te permitirá ejecutar Python desde la línea de comandos (CMD o PowerShell) sin problemas.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Iniciar la Instalación:&lt;/strong&gt; Selecciona la opción &lt;strong&gt;"Install Now"&lt;/strong&gt; (Instalar ahora).
&amp;gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Finalizar:&lt;/strong&gt; El proceso tomará unos minutos. Una vez finalizado, verás un mensaje de &lt;strong&gt;"Setup was successful"&lt;/strong&gt;. Haz clic en &lt;strong&gt;"Close"&lt;/strong&gt; (Cerrar).&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Paso 2: Instalación en macOS 🍎
&lt;/h3&gt;

&lt;p&gt;Si estás usando &lt;strong&gt;macOS&lt;/strong&gt;, sigue estos pasos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Ejecuta el Instalador:&lt;/strong&gt; Busca el archivo que descargaste (generalmente un archivo &lt;code&gt;.pkg&lt;/code&gt;) y haz doble clic para ejecutarlo.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Sigue las Instrucciones:&lt;/strong&gt; Se abrirá un asistente de instalación estándar de macOS. Sigue las instrucciones haciendo clic en &lt;strong&gt;"Continue"&lt;/strong&gt; (Continuar) y &lt;strong&gt;"Agree"&lt;/strong&gt; (Aceptar) si se te pide aceptar la licencia.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Selecciona la Ubicación:&lt;/strong&gt; Elige la ubicación de instalación (generalmente la instalación predeterminada es la correcta).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Instalar:&lt;/strong&gt; Haz clic en &lt;strong&gt;"Install"&lt;/strong&gt; (Instalar). Es posible que se te pida tu contraseña de administrador para proceder.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Finalizar:&lt;/strong&gt; Una vez que veas el mensaje de &lt;strong&gt;"Installation was successful"&lt;/strong&gt; (La instalación fue exitosa), haz clic en &lt;strong&gt;"Close"&lt;/strong&gt; (Cerrar).&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Nota para macOS:&lt;/strong&gt; Las versiones modernas de macOS ya vienen con una versión antigua de Python (a menudo Python 2.x). Al instalar la nueva versión de Python 3, asegúrate de usar el comando &lt;code&gt;python3&lt;/code&gt; en tu Terminal para ejecutarla, en lugar de &lt;code&gt;python&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Paso 3: Verificar la Instalación ✅
&lt;/h3&gt;

&lt;p&gt;Una vez completada la instalación, debes verificar que Python esté funcionando correctamente:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Abrir la Terminal/Línea de Comandos:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows:&lt;/strong&gt; Abre el &lt;strong&gt;CMD&lt;/strong&gt; (Símbolo del sistema) o &lt;strong&gt;PowerShell&lt;/strong&gt; buscando "CMD" en el menú de inicio.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;macOS:&lt;/strong&gt; Abre la &lt;strong&gt;Terminal&lt;/strong&gt; (la encuentras en Aplicaciones &amp;gt; Utilidades).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ejecutar el Comando:&lt;/strong&gt; Escribe el siguiente comando y presiona &lt;strong&gt;Enter&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  * **Si en macOS el comando anterior muestra `Python 2.x.x`**, intenta con:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ```bash
    python3 --version
    ```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verificar el Resultado:&lt;/strong&gt; Si la instalación fue exitosa, la consola te mostrará la versión de Python que acabas de instalar, por ejemplo:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Python 3.12.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;¡Felicidades!&lt;/strong&gt; Ahora tienes Python instalado y listo para ser usado en tu computadora.&lt;/p&gt;




&lt;p&gt;¿Te gustaría que te ayude a configurar tu primer entorno de desarrollo o a escribir un pequeño programa de "Hola Mundo" en Python?&lt;/p&gt;

</description>
      <category>python</category>
      <category>tutorial</category>
      <category>programming</category>
    </item>
    <item>
      <title>Desplegando una Base de Datos de Fontanería con SQL Server: Tablas, Vistas y Lógica de Negocio</title>
      <dc:creator>Oscar olg</dc:creator>
      <pubDate>Thu, 27 Nov 2025 05:59:20 +0000</pubDate>
      <link>https://dev.to/oscarolg/desplegando-una-base-de-datos-de-fontaneria-con-sql-server-tablas-vistas-y-logica-de-negocio-5b2</link>
      <guid>https://dev.to/oscarolg/desplegando-una-base-de-datos-de-fontaneria-con-sql-server-tablas-vistas-y-logica-de-negocio-5b2</guid>
      <description>&lt;p&gt;Aquí podéis encontrar los SQL de la base de datos&lt;br&gt;
&lt;strong&gt;&lt;a href="https://github.com/webmastervetea/SQLServer2022" rel="noopener noreferrer"&gt;https://github.com/webmastervetea/SQLServer2022&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;¡Hola, dev-comunidad! Hoy vamos a sumergirnos en la anatomía de una base de datos diseñada para gestionar una empresa de fontanería. Hemos recibido una serie de archivos SQL Server (&lt;code&gt;.sql&lt;/code&gt;) que, en conjunto, crean la estructura, las vistas de reporting y la lógica de negocio central (Procesos Almacenados y Funciones) de nuestro sistema.&lt;/p&gt;

&lt;p&gt;Analicemos qué hace cada archivo y cómo se construye este esquema de principio a fin.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. ⚙️ &lt;code&gt;0 Base de datos.sql&lt;/code&gt;: El cimiento del proyecto
&lt;/h2&gt;

&lt;p&gt;Este es el punto de partida. Un archivo simple pero esencial:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Propósito:&lt;/strong&gt; Crear la base de datos principal que alojará todo el esquema.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Acciones Clave:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Verifica si la base de datos llamada &lt;code&gt;Fontaneria&lt;/code&gt; ya existe.&lt;/li&gt;
&lt;li&gt;Si existe, la elimina (ideal para un entorno de desarrollo o &lt;em&gt;clean up&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;Ejecuta &lt;code&gt;CREATE DATABASE Fontaneria;&lt;/code&gt; para crear el contenedor final de datos.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Este archivo garantiza que estamos trabajando sobre una pizarra limpia y con el nombre correcto (&lt;code&gt;Fontaneria&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  2. 📝 &lt;code&gt;1 Creacion de Tablas y relaciones.sql&lt;/code&gt;: El Esquema Estructural
&lt;/h2&gt;

&lt;p&gt;Este es el archivo más extenso y detalla el &lt;strong&gt;Modelo de Entidad-Relación (E-R)&lt;/strong&gt;. Aquí se definen todas las tablas y cómo se relacionan entre sí a través de claves primarias (PK) y foráneas (FK).&lt;/p&gt;

&lt;h3&gt;
  
  
  🏛️ Tablas Principales Creadas
&lt;/h3&gt;

&lt;p&gt;El archivo organiza el esquema en bloques lógicos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Tablas Base (&lt;code&gt;Empleados&lt;/code&gt;, &lt;code&gt;Clientes&lt;/code&gt;, &lt;code&gt;Proveedores&lt;/code&gt;):&lt;/strong&gt; Los actores principales del negocio.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Almacén e Inventario (&lt;code&gt;Articulos&lt;/code&gt;, &lt;code&gt;Compras&lt;/code&gt;, &lt;code&gt;DetallesCompra&lt;/code&gt;):&lt;/strong&gt; Gestión de &lt;em&gt;stock&lt;/em&gt; y seguimiento de las adquisiciones a proveedores.

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Relación M:M:&lt;/strong&gt; &lt;code&gt;DetallesCompra&lt;/code&gt; actúa como la tabla de unión entre &lt;code&gt;Compras&lt;/code&gt; y &lt;code&gt;Articulos&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Facturación (&lt;code&gt;Facturas&lt;/code&gt;, &lt;code&gt;LineasFactura&lt;/code&gt;):&lt;/strong&gt; El motor económico.

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Relación:&lt;/strong&gt; Una &lt;code&gt;Factura&lt;/code&gt; tiene múltiples &lt;code&gt;LineasFactura&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Agenda y Servicios (&lt;code&gt;Servicios&lt;/code&gt;, &lt;code&gt;Citas&lt;/code&gt;):&lt;/strong&gt; Gestión de la operativa diaria.

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Relación Uno a Uno Opcional:&lt;/strong&gt; Una &lt;code&gt;Cita&lt;/code&gt; puede estar ligada a una &lt;code&gt;FacturaID&lt;/code&gt; (a través de un &lt;code&gt;UNIQUE&lt;/code&gt; constraint).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Horarios (&lt;code&gt;HorariosLaborales&lt;/code&gt;, &lt;code&gt;Ausencias&lt;/code&gt;):&lt;/strong&gt; Gestión de la disponibilidad de los &lt;code&gt;Empleados&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Tablas Adicionales (&lt;code&gt;ZonasOperacion&lt;/code&gt;, &lt;code&gt;PartesDeTrabajo&lt;/code&gt;, &lt;code&gt;MaterialParteTrabajo&lt;/code&gt;):&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;PartesDeTrabajo&lt;/code&gt; registra la ejecución real del servicio, enlazado a una &lt;code&gt;Cita&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;MaterialParteTrabajo&lt;/code&gt; registra qué &lt;code&gt;Articulos&lt;/code&gt; se consumieron en un &lt;code&gt;ParteDeTrabajo&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Enfoque de Desarrollo:&lt;/strong&gt; El script utiliza &lt;code&gt;IF OBJECT_ID... DROP TABLE&lt;/code&gt; para garantizar la limpieza previa y &lt;code&gt;IF OBJECT_ID... CREATE TABLE&lt;/code&gt; para hacer que el script sea &lt;strong&gt;idempotente&lt;/strong&gt; (ejecutable varias veces sin error, aunque SQL Server ya tiene &lt;code&gt;CREATE IF NOT EXISTS&lt;/code&gt; para tablas).&lt;/p&gt;




&lt;h2&gt;
  
  
  3. 📊 &lt;code&gt;2 Creacion de Vistas.sql&lt;/code&gt;: Reporting y Abstracción de Datos
&lt;/h2&gt;

&lt;p&gt;Las &lt;strong&gt;Vistas&lt;/strong&gt; son consultas predefinidas que actúan como "tablas virtuales". Simplifican el acceso a datos complejos, combinando información de múltiples tablas con &lt;em&gt;JOINs&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Propósito:&lt;/strong&gt; Crear capas de datos optimizadas para &lt;em&gt;reporting&lt;/em&gt; e interfaces de usuario.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vistas Destacadas:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;VW_Agenda_Detallada&lt;/code&gt;:&lt;/strong&gt; Muestra todas las citas con los nombres del Cliente, el Servicio y el Fontanero asignado.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;VW_Inventario_Bajo_Minimo&lt;/code&gt;:&lt;/strong&gt; Una alerta crucial que lista los &lt;code&gt;Articulos&lt;/code&gt; donde &lt;code&gt;StockActual &amp;lt;= StockMinimo&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;VW_Partes_Trabajo_Auditoria&lt;/code&gt;:&lt;/strong&gt; Agrega datos del &lt;code&gt;ParteDeTrabajo&lt;/code&gt;, incluyendo las horas trabajadas y el total de materiales consumidos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;VW_Valoracion_Inventario&lt;/code&gt;:&lt;/strong&gt; Calcula el valor del &lt;em&gt;stock&lt;/em&gt; actual, incluyendo el &lt;strong&gt;Coste Medio de Adquisición (CMA)&lt;/strong&gt; a través de una subconsulta, fundamental para la contabilidad.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. 🧠 &lt;code&gt;3 Procedimientos y Funciones Almacenados.sql&lt;/code&gt;: La Lógica del Negocio
&lt;/h2&gt;

&lt;p&gt;Aquí reside la inteligencia del sistema. Los &lt;strong&gt;Stored Procedures&lt;/strong&gt; (SP) y &lt;strong&gt;Functions&lt;/strong&gt; (FN) encapsulan transacciones complejas y reglas de negocio.&lt;/p&gt;

&lt;h3&gt;
  
  
  💾 Procedimientos Almacenados (SP)
&lt;/h3&gt;

&lt;p&gt;Los SP aseguran que las operaciones críticas se ejecuten de manera atómica (o todo, o nada) utilizando &lt;strong&gt;Transacciones&lt;/strong&gt; (&lt;code&gt;BEGIN/COMMIT/ROLLBACK TRANSACTION&lt;/code&gt;).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;SP_AgendarNuevaCita&lt;/code&gt;:&lt;/strong&gt; Inserta una nueva fila en la tabla &lt;code&gt;Citas&lt;/code&gt; con una validación simple de fechas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;SP_FinalizarServicioYGenerarParte&lt;/code&gt;:&lt;/strong&gt; El SP más crítico del flujo de trabajo:

&lt;ol&gt;
&lt;li&gt; Crea un nuevo &lt;code&gt;ParteDeTrabajo&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; Registra el material consumido en &lt;code&gt;MaterialParteTrabajo&lt;/code&gt; (usando una tabla de tipo definida por el usuario: &lt;code&gt;TipoMaterialConsumido&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Actualiza el *Stock&lt;/strong&gt;* de la tabla &lt;code&gt;Articulos&lt;/code&gt; (descuento).&lt;/li&gt;
&lt;li&gt; Cambia el &lt;code&gt;EstadoCita&lt;/code&gt; a 'Completada'.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;SP_ProcesarRecepcionCompra&lt;/code&gt;:&lt;/strong&gt; Actualiza el inventario al recibir una compra:

&lt;ol&gt;
&lt;li&gt; Inserta los detalles en &lt;code&gt;DetallesCompra&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Actualiza el *Stock&lt;/strong&gt;* de la tabla &lt;code&gt;Articulos&lt;/code&gt; (adición).&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;SP_GenerarFacturaDesdeCita&lt;/code&gt;:&lt;/strong&gt; Automatiza la facturación:

&lt;ol&gt;
&lt;li&gt; Valida que la Cita esté 'Completada' y no facturada.&lt;/li&gt;
&lt;li&gt; Calcula el &lt;strong&gt;Total Neto&lt;/strong&gt; sumando: el precio base del &lt;code&gt;Servicio&lt;/code&gt;, la &lt;strong&gt;Mano de Obra&lt;/strong&gt; (horas trabajadas * costo/hora) y el costo del &lt;strong&gt;Material Consumido&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt; Calcula el IVA y el Total Final.&lt;/li&gt;
&lt;li&gt; Inserta la &lt;code&gt;Factura&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; Inserta todas las &lt;code&gt;LineasFactura&lt;/code&gt; (Servicio Base, Mano de Obra y Materiales).&lt;/li&gt;
&lt;li&gt; Asocia la nueva &lt;code&gt;FacturaID&lt;/code&gt; a la &lt;code&gt;Cita&lt;/code&gt; original.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🧪 Funciones (FN)
&lt;/h3&gt;

&lt;p&gt;Las funciones retornan un valor o una tabla, ideales para cálculos o verificaciones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;FN_CalcularDisponibilidadDiaria&lt;/code&gt;:&lt;/strong&gt; Una función escalar (&lt;code&gt;RETURNS BIT&lt;/code&gt;) que verifica la disponibilidad de un empleado en un momento dado (&lt;code&gt;DATETIME&lt;/code&gt;), comprobando:

&lt;ol&gt;
&lt;li&gt; Si está de &lt;code&gt;Ausencias&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; Si está dentro de su &lt;code&gt;HorarioLaboral&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; Si tiene alguna &lt;code&gt;Cita&lt;/code&gt; superpuesta.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;FN_ObtenerTotalArticulosFactura&lt;/code&gt;:&lt;/strong&gt; Una función de tabla (&lt;code&gt;RETURNS @TABLE&lt;/code&gt;) que resume todos los artículos facturados en una factura específica.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Este conjunto de archivos proporciona un &lt;strong&gt;sistema de gestión robusto&lt;/strong&gt; para la empresa de fontanería, abarcando desde el control de inventario y la agenda, hasta la facturación y la auditoría. ¡Un excelente &lt;em&gt;boilerplate&lt;/em&gt; para proyectos de gestión de servicios!&lt;/p&gt;

</description>
      <category>sqlserver</category>
      <category>microsoft</category>
      <category>programming</category>
    </item>
    <item>
      <title>🚀 Cómo Crear una Vista en SQL Server 2022: Simplifica tu Acceso a Datos</title>
      <dc:creator>Oscar olg</dc:creator>
      <pubDate>Tue, 25 Nov 2025 05:04:54 +0000</pubDate>
      <link>https://dev.to/oscarolg/como-crear-una-vista-en-sql-server-2022-simplifica-tu-acceso-a-datos-1g1e</link>
      <guid>https://dev.to/oscarolg/como-crear-una-vista-en-sql-server-2022-simplifica-tu-acceso-a-datos-1g1e</guid>
      <description>&lt;p&gt;Si trabajas con &lt;strong&gt;SQL Server&lt;/strong&gt;, sabes lo importante que es mantener tus consultas eficientes y el código limpio. Una de las herramientas más poderosas para lograr esto es el uso de &lt;strong&gt;Vistas&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Las &lt;strong&gt;Vistas&lt;/strong&gt; son tablas virtuales basadas en el conjunto de resultados de una consulta SQL. No almacenan datos físicamente (excepto en el caso de las Vistas Indexadas), sino que actúan como una ventana hacia los datos de las tablas subyacentes.&lt;/p&gt;

&lt;p&gt;En este artículo, te mostraré paso a paso cómo crear una vista en &lt;strong&gt;SQL Server 2022&lt;/strong&gt; y por qué deberías incorporarlas a tu flujo de trabajo.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Por Qué Usar Vistas? 🤔
&lt;/h2&gt;

&lt;p&gt;Las vistas ofrecen varios beneficios clave:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Simplificación de Consultas:&lt;/strong&gt; Permiten encapsular lógica de consulta compleja (joins, filtros, cálculos) en una sola "tabla" virtual. En lugar de escribir la consulta compleja una y otra vez, simplemente seleccionas datos de la vista.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Seguridad:&lt;/strong&gt; Puedes restringir el acceso a ciertas columnas o filas sin dar acceso directo a las tablas base. Un usuario solo necesita permisos para seleccionar datos de la vista, no de las tablas subyacentes.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Abstracción de Datos:&lt;/strong&gt; Si la estructura de las tablas base cambia, a menudo solo necesitas modificar la vista, no todas las aplicaciones o scripts que dependen de ella.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;## 🛠️ Creación de la Vista Paso a Paso&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Crear una vista es un proceso sencillo que se realiza con la instrucción &lt;code&gt;CREATE VIEW&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. La Sintaxis Básica
&lt;/h3&gt;

&lt;p&gt;La sintaxis es bastante directa:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;VIEW&lt;/span&gt; &lt;span class="n"&gt;NombreDeLaVista&lt;/span&gt;
&lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;columna1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;columna2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;-- ... otras columnas/cálculos&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;
    &lt;span class="n"&gt;TablaBase&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt;
    &lt;span class="n"&gt;condicion_de_filtrado&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;### 2. Ejemplo Práctico&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imaginemos que tienes dos tablas: &lt;code&gt;Empleados&lt;/code&gt; y &lt;code&gt;Departamentos&lt;/code&gt;. Quieres una vista que muestre el nombre completo del empleado, su puesto y el nombre del departamento al que pertenece.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tablas Base:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Empleados&lt;/code&gt;&lt;/strong&gt;: &lt;code&gt;EmpleadoID&lt;/code&gt;, &lt;code&gt;PrimerNombre&lt;/code&gt;, &lt;code&gt;Apellido&lt;/code&gt;, &lt;code&gt;PuestoID&lt;/code&gt;, &lt;code&gt;Salario&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Departamentos&lt;/code&gt;&lt;/strong&gt;: &lt;code&gt;DepartamentoID&lt;/code&gt;, &lt;code&gt;NombreDepartamento&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Código para Crear la Vista:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;TuBaseDeDatos&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="k"&gt;GO&lt;/span&gt;

&lt;span class="c1"&gt;-- 1. Crear la Vista&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;VIEW&lt;/span&gt; &lt;span class="n"&gt;v_InformacionCompletaEmpleados&lt;/span&gt;
&lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PrimerNombre&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;' '&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Apellido&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;NombreCompleto&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PuestoID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NombreDepartamento&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Salario&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;
    &lt;span class="n"&gt;Empleados&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;E&lt;/span&gt;
&lt;span class="k"&gt;INNER&lt;/span&gt; &lt;span class="k"&gt;JOIN&lt;/span&gt;
    &lt;span class="n"&gt;Departamentos&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;D&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DepartamentoID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DepartamentoID&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt;
    &lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Activo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;-- Solo empleados activos&lt;/span&gt;
&lt;span class="k"&gt;GO&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Usando la Vista
&lt;/h3&gt;

&lt;p&gt;Una vez creada, puedes consultar tu vista exactamente como si fuera una tabla normal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- 2. Consultar la Vista&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;NombreCompleto&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;NombreDepartamento&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;
    &lt;span class="n"&gt;v_InformacionCompletaEmpleados&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt;
    &lt;span class="n"&gt;NombreDepartamento&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Ventas'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  💡 Consejos Adicionales (Esquemas y Modificación)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Uso de Esquemas
&lt;/h3&gt;

&lt;p&gt;Siempre es una &lt;strong&gt;buena práctica&lt;/strong&gt; prefijar el nombre de la vista con un esquema, como &lt;code&gt;dbo&lt;/code&gt; (por defecto) o un esquema personalizado (&lt;code&gt;RH&lt;/code&gt;, &lt;code&gt;Ventas&lt;/code&gt;, etc.), para mantener tu base de datos organizada.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;VIEW&lt;/span&gt; &lt;span class="n"&gt;RH&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;v_InformacionCompletaEmpleados&lt;/span&gt;
&lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="c1"&gt;-- ... (cuerpo de la consulta)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Modificación de Vistas
&lt;/h3&gt;

&lt;p&gt;Si necesitas cambiar la definición de la vista, usa &lt;code&gt;ALTER VIEW&lt;/code&gt;. No necesitas eliminarla y volver a crearla.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;VIEW&lt;/span&gt; &lt;span class="n"&gt;v_InformacionCompletaEmpleados&lt;/span&gt;
&lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="c1"&gt;-- ... (tu nueva consulta)&lt;/span&gt;
    &lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FechaContratacion&lt;/span&gt; &lt;span class="c1"&gt;-- ¡Nueva columna añadida!&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;
    &lt;span class="n"&gt;Empleados&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;E&lt;/span&gt;
&lt;span class="k"&gt;INNER&lt;/span&gt; &lt;span class="k"&gt;JOIN&lt;/span&gt;
&lt;span class="c1"&gt;-- ... (resto de la consulta)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;Las &lt;strong&gt;Vistas en SQL Server 2022&lt;/strong&gt; son una característica indispensable que te permite escribir código más limpio, mejorar la seguridad y simplificar el acceso a datos complejos para ti y otros desarrolladores. ¡Comienza a usarlas hoy y notarás la diferencia en la mantenibilidad de tus proyectos!&lt;/p&gt;

</description>
      <category>sql</category>
      <category>microsoft</category>
      <category>database</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Pasos para Crear una Nueva Instancia de SQL Server</title>
      <dc:creator>Oscar olg</dc:creator>
      <pubDate>Sat, 22 Nov 2025 18:43:26 +0000</pubDate>
      <link>https://dev.to/oscarolg/pasos-para-crear-una-nueva-instancia-de-sql-server-3emg</link>
      <guid>https://dev.to/oscarolg/pasos-para-crear-una-nueva-instancia-de-sql-server-3emg</guid>
      <description>&lt;p&gt;Crear una instancia en SQL Server 2022 se realiza a través del &lt;strong&gt;Asistente para la instalación&lt;/strong&gt; (SQL Server Installation Center) de Microsoft.&lt;/p&gt;

&lt;p&gt;El proceso es el mismo ya sea que estés instalando la &lt;strong&gt;primera instancia&lt;/strong&gt; (la instancia predeterminada) o una &lt;strong&gt;instancia adicional&lt;/strong&gt; (instancia con nombre).&lt;/p&gt;

&lt;p&gt;Aquí tienes los pasos clave para crear una nueva instancia de SQL Server 2022:&lt;/p&gt;




&lt;h3&gt;
  
  
  🚀 Pasos para Crear una Nueva Instancia de SQL Server
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Iniciar el Centro de Instalación
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Ejecuta el programa de instalación&lt;/strong&gt; (&lt;code&gt;setup.exe&lt;/code&gt;) desde el medio de instalación de SQL Server 2022 (la imagen ISO o el archivo descargado).&lt;/li&gt;
&lt;li&gt; El programa iniciará el &lt;strong&gt;SQL Server Installation Center&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt; En el menú de la izquierda, selecciona &lt;strong&gt;Instalación&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt; Haz clic en la opción &lt;strong&gt;Nueva instalación independiente de SQL Server o agregar características a una instalación existente&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  2. Configuración Inicial y Edición
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Clave de Producto:&lt;/strong&gt; Introduce tu clave de licencia o selecciona la edición gratuita &lt;strong&gt;Express&lt;/strong&gt; o &lt;strong&gt;Developer&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Acuerdo de Licencia:&lt;/strong&gt; Acepta los términos y haz clic en Siguiente.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Microsoft Update:&lt;/strong&gt; Se recomienda marcar la casilla para buscar actualizaciones de SQL Server y haz clic en Siguiente.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Reglas de Instalación:&lt;/strong&gt; El asistente ejecutará una comprobación para asegurar que no haya conflictos o errores. Haz clic en Siguiente si todas las reglas pasan.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Azure Extension (SQL Server 2022):&lt;/strong&gt; Si no planeas integrar con Azure, puedes dejar esto por defecto o saltarlo. Haz clic en Siguiente.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  3. Selección de Características (Features)
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt; En la pantalla &lt;strong&gt;Selección de características&lt;/strong&gt;, asegúrate de marcar al menos &lt;strong&gt;Servicios de motor de base de datos&lt;/strong&gt; (&lt;code&gt;Database Engine Services&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt; Si lo necesitas, selecciona otras características (como &lt;code&gt;Analysis Services&lt;/code&gt;, &lt;code&gt;Reporting Services&lt;/code&gt;, o &lt;code&gt;SQL Server Replication&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt; Haz clic en Siguiente.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  4. Configuración de la Instancia (¡Paso Crucial!)
&lt;/h4&gt;

&lt;p&gt;Esta es la pantalla donde defines el nombre de tu instancia:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Opción&lt;/th&gt;
&lt;th&gt;Descripción&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Instancia predeterminada&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Utiliza el nombre de instancia por defecto (&lt;code&gt;MSSQLSERVER&lt;/code&gt;). Si ya tienes otra instancia instalada, esta opción estará deshabilitada. &lt;strong&gt;Ruta de conexión:&lt;/strong&gt; Solo el nombre del servidor (Ej: &lt;code&gt;NOMBRE_DE_MI_PC&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Instancia con nombre&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Te permite asignar un &lt;strong&gt;nombre personalizado&lt;/strong&gt; a la instancia (Ej: &lt;code&gt;SQLSERVER2022&lt;/code&gt;, &lt;code&gt;INSTANCIA_DEV&lt;/code&gt;). Es la opción recomendada cuando instalas varias instancias en el mismo servidor. &lt;strong&gt;Ruta de conexión:&lt;/strong&gt; &lt;code&gt;NOMBRE_DE_MI_PC\NOMBRE_INSTANCIA&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt; Selecciona &lt;strong&gt;Instancia con nombre&lt;/strong&gt; y asigna un nombre descriptivo a tu nueva instancia.&lt;/li&gt;
&lt;li&gt; Haz clic en Siguiente.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  5. Configuración del Servidor
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Cuentas de Servicio:&lt;/strong&gt; Configura la cuenta de inicio de sesión y el tipo de inicio para cada servicio del motor de base de datos. Para entornos de desarrollo o pruebas, se suele usar &lt;code&gt;NT Authority\System&lt;/code&gt; o cuentas virtuales, pero para producción se usan cuentas de dominio específicas.&lt;/li&gt;
&lt;li&gt; Haz clic en Siguiente.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  6. Configuración del Motor de Base de Datos
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Modo de Autenticación:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Modo de Autenticación de Windows:&lt;/strong&gt; Solo permite conectarse a usuarios de dominio de Windows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modo Mixto (Recomendado):&lt;/strong&gt; Permite conectarse tanto con usuarios de Windows como con usuarios de SQL Server (que requieren un nombre de usuario y contraseña).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; Si eliges &lt;strong&gt;Modo Mixto&lt;/strong&gt;, debes introducir y confirmar una contraseña para el usuario administrador por defecto de SQL Server, el usuario &lt;code&gt;sa&lt;/code&gt; (System Administrator).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Administradores de SQL Server:&lt;/strong&gt; Haz clic en &lt;strong&gt;Agregar usuario actual&lt;/strong&gt; para asegurarte de que tu cuenta de Windows tenga privilegios administrativos en la nueva instancia.&lt;/li&gt;
&lt;li&gt; Haz clic en Siguiente.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  7. Finalizar la Instalación
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt; En la pantalla &lt;strong&gt;Listo para instalar&lt;/strong&gt;, revisa el resumen de las opciones que has seleccionado.&lt;/li&gt;
&lt;li&gt; Haz clic en &lt;strong&gt;Instalar&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt; El programa instalará los componentes seleccionados y creará la nueva instancia. Al finalizar, verás un informe de instalación exitosa.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  ✅ Paso Adicional
&lt;/h3&gt;

&lt;p&gt;Una vez finalizada la instalación de la instancia, asegúrate de descargar e instalar &lt;strong&gt;SQL Server Management Studio (SSMS)&lt;/strong&gt; por separado para poder conectarte y administrar la base de datos de manera gráfica.&lt;/p&gt;

&lt;p&gt;¿Necesitas ayuda con la &lt;strong&gt;conexión a esta nueva instancia&lt;/strong&gt; a través de SSMS?&lt;/p&gt;

</description>
      <category>sqlserver</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
