Clases en PowerShell

En programaci贸n orientada a objetos, aunque suene un redundante, se utilizan objetos. Y estos objetos se pueden agrupar en las llamadas clases. Las clases dan forma a un objeto, como si fuese un template, definiendo como debe verse un objeto y potencialmente lo que se necesita para crear uno nuevo.

Es recomendable tener en cuenta la siguiente afirmaci贸n:

Un objeto no es una clase, ni una clase es un objeto. Un objeto es una instancia de una clase.

Por qu茅 usar clases?

En repetidas ocasiones nos encontramos escribiendo m贸dulos y funciones por ah铆 tratando de automatizar el mundo que nos rodea. Es ah铆 uno de los grandes usos de las clases en PowerShell. Con las clases vamos a poder representar estructuras de datos complejas y m谩s a煤n al utilizar m煤ltiples funciones que necesitan pasar los mismos datos.

El otro gran punto para usar clases es al momento de trabajar con DSC. Ya en el blog hemos tenido varias entradas hablando sobre DSC (aqu铆 y aqu铆). DSC est谩 ganando m谩s y m谩s tracci贸n todos los d铆as y con esta adpoci贸n, hay una brecha a煤n mayor para los nuevos recursos. Los recursos DSC Class-based son simplemente m谩s f谩ciles de desarrollar y mantener.

Creando nuestra primer clase

Para definir una clase es necesario utilizar la keyword class:

class Alien {

  }

Como mencionamos anteriormente, ahora que tenemos nuestra clase definida, podemos crear instancias de ella. Tenemos a disposici贸n varias maneras diferentes de hacer esto. La primera es usar New-Object con el par谩metro -TypeName.

$greenMan = New-Object -TypeName Alien

La segunda manera de instanciar una clase es llamar al constructor est谩tico de la clase. Por m谩s informaci贸n sobre constructores y los tipos existentes acceder al siguiente enlace. Para invocarlo es necesario utilizar los dos puntos de la siguiente manera:

$greenMan = [Alien]::New()

Describiendo las clases

Propiedades

Las propiedades son cosas sobre un objeto, cosas que lo representan y definen. Si describi茅ramos un alien como el ejemplo, las propiedades podr铆an ser altura y peso. Agregamos propiedades a una clase agregando variables dentro de la clase. Si bien no es obligatorio, es una buena idea definir el tipo de variable para determinar el tipo de dato a ingresar:

class Alien {
    [string]$Nombre
    
    [int]$Altura

    [int]$Peso
  }

Validaci贸n de las propiedades

Como indica el t铆tulo, PowerShell permite la validaci贸n de las propiedades. Esto permite que los datos que se ingresan cumplan con lo que se requiere para cada propiedad:

class Alien {
    [ValidatePattern('^[a-z]')][ValidateLength(3,15)][string]$Nombre
    
    [ValidateRange(0,200)][int]$Altura

    [ValidateRange(0,300)][int]$Peso
  }

Propiedades ocultas

Las clases de PowerShell tambi茅n admiten propiedades ocultas. Para ocultar una propiedad, se debe usar la keyword hidden justo antes del nombre de la propiedad. Para el siguiente ejemplo vamos a ocultar la propiedad ID sea del tipo GUID y est茅 oculta para el usuario.

class Alien {
    [Guid]hidden $ID

    [ValidatePattern('^[a-z]')][ValidateLength(3,15)][string]$Nombre
    
    [ValidateRange(0,200)][int]$Altura

    [ValidateRange(0,300)][int]$Peso
  }

Y para comprobar esto vamos a ejecutar el c贸digo que genera la clase, junto una instancia de la misma llamada $greenMan:

Generar una instancia de la clase 'Alien'

En donde se utiliz贸:

$greenMan | Get-Member -MemberType Properties

Para ver las propiedades disponibles dentro del objeto generado.

Happy scripting!

Comments