Jerarquías de clase dentro de la Programación orientada a objetos

Como aprendimos en el artículo de fundamentos de la programación orientada a objetos existen objetos que son instancias de clases. Pero las aplicaciones reales, como la vida real, no se componen de una sola clase. Estas clases pueden estar relacionadas entre si para crear un diseño mas complejo que permita resolver problemas más complejos.

Cuando varias clases se relacionan entre si se dice que forman una jerarquía de clases.

De gatos y pájaros

Imaginemos que tu vecino tiene un gato llamado Silvestre. Los pájaros y los gatos tienen campos y métodos en común, ambos tienen un nombre, un sexo, edad, peso, tamaño, color, comen, duermen, observan, etc. Pero también tienen diferencias, unos tienen alas y otros sólo patas, unos pían y otros maúllan.

Observando los atributos comunes de las clases Pájaro y Gato podemos diseñar la clase Animal.

Clase Animal:

    Campos:

        nombre, edad, sexo, peso, tamaño, color, patas

    Métodos:

        respirar, comer, dormir, observar 

A partir de la clase Animal podemos crear las clases Pájaro y Gato atendiendo a sus diferencias.

Clase Pájaro

    Campos:

        alas, pico

    Métodos:

        piar, volar

Clase Gato

    Campos:

        dientes, orejas

    Métodos:

        maullar, correr

Las clases Pájaro y Gato heredan de la clase Animal el conjunto de campos y métodos. La clase Animal se conoce como clase padre o superclase.

Las clases hijas de la superclase Animal se denominan subclases. Heredan el comportamiento y el estado de su clase padre.

La relación que existe entre superclases y subclases se denomina jerarquía de clases. Estas relaciones pueden basarse en la herencia de métodos y campos e incluso en la modificación de alguno de esos métodos.

Sobreescritura de métodos

Cuando una clase hija modifica un método de la clase padre se dice que el método está sobreescrito (overwrite).

Un método sobreescrito puede limitarse a sustituir por completo el método de la clase padre o a mejorarlo ya que en la llamada al método de la clase hija, esta clase hija internamente primero ejecuta el método de la clase padre, copiando su comportamiento, y luego ejecutar más órdenes mejorando el comportamiento haciéndolo más específico para la clase hija.

Fundamentos de programación orientada a objetos

La Programación orientada a objetos (POO) es un paradigma de programación en el que la información y la funcionalidad de una aplicación software se agrupa en pequeños grupos especiales llamados objetos, estos objetos siguen un diseño planificado por el programador y estos objetos son representados en el diseño por las clases.

Pájaros y objetos

Muchos autores han explicado la POO hablando de gatos, perros o coches. En este artículo probaremos a explicar la POO hablando de pájaros.

Imaginemos que tienes un pájaro llamado Piolín. Piolín es un objeto, una instancia de la clase Pájaro.

Campos y métodos

Cada pájaro tiene una serie de atributos: nombre, edad, sexo, peso, tamaño, color de plumaje, tipo de alimentación, etc. Este grupo de atributos se denominan campos de la clase. Los campos representan la información que contendrá y manipulará el objeto.

Al conjunto de toda la información del objeto en un momento dado se la denomina estado del objeto. 

Además todos los pájaros se comportan de forma similar: respiran, comen, observan, crecen, duermen, etc. Estos son los métodos de la clase. Los métodos representan la funcionalidad que podrá realizar el objeto.

Al conjunto de campos y métodos de una clase se le conoce como el conjunto de miembros de una clase.

Instancias

Los objetos son instancias de clase. Piolín es una instancia de la clase Pájaro, Correcaminos es otra instancia de la clase pájaro.

Piolín y Correcaminos tienen el mismo grupo de campos y métodos. La diferencia está en los valores de estos atributos ya que permiten hacer diferente a cada instancia de la clase pájaro.

Una clase es como un plano de construcción que permite dar forma a la información y las acciones que podrá realizar un objeto.

Un ejemplo de definición de clase podría ser el siguiente:

Clase Pájaro:

    Campos:

        nombre, edad, sexo, peso, tamaño, color

    Miembros:

        respirar, comer, dormir, observar 

Participación en el evento de Atos para Global Accessibility Awareness Day 2022

El Día Mundial de la Concienciación sobre la Accesibilidad, conocido internacionalmente como Global Accessibility Awareness Day, o por sus siglas en inglés “GAAD”, es un evento internacional cuyo propósito es de promover las iniciativas, diálogos y reflexiones en torno al tema de la accesibilidad digital y la inclusión.

El objetivo de este día es conectar a líderes, profesionales, estudiantes y personas interesadas en la accesibilidad y la inclusión para Impulsar el conocimiento sobre la accesibilidad.

Atos y el GAAD 2022

El próximo martes, 10 de mayo, Atos Iberia celebrará interesantes seminarios con invitados de primer nivel que comentarán diferentes formas de usar la accesibilidad digital para mejorar la inclusión de las personas con discapacidad.

El evento, en español y con subtítulos, será retransmitido por streaming, de 15:00 a 18:00 CET, a través de la cuenta de Atos en Twitter España, sin necesidad de registro.

Participaré en el evento en una entrevista que me hizo Ricardo García Bahamonde hablando sobre accesibilidad, tecnologías antiguas y nuevas, multiverso y cajeros automáticos entre otras cosas.

Se puede consultar el programa del evento en la publicación de Atos en LinkedIn.

Cómo usar GoogleDrive con VoiceOver para Mac

El servicio de almacenamiento de datos de Google, conocido como Google drive, permite a los usuarios de Mac acceder a sus ficheros y carpetas instalando un cliente de Google drive y accediendo a él con el Finder de Mac como un volumen más conectado a nuestro ordenador.

Pero a veces nos interesa poder acceder a nuestra cuenta de Google drive a través de la interfaz web de este servicio.

Su accesibilidad

Aunque Google sigue trabajando por mejorar la accesibilidad de todos sus servicios, su política sigue siendo la de que el usuario debe usar unas teclas o atajos de teclado determinados obligando a los usuarios a conocer y aprender estos atajos.

Estos atajos de teclado no son complicados y siguen una cierta lógica. Google ofrece una página con todos los atajos de teclado para Google drive.

Atajos de teclado más importantes

Los atajos de teclado principalmente consisten en la pulsación de una tecla de activación y a continuación una tecla de selección de tipo.

Por ejemplo, para ir a la barra de navegación debemos pulsar la tecla G y a continuación, tras soltar la tecla G, pulsar la tecla N. El foco de nuestro lector de pantallas se colocará en la barra de navegación y utilizando las flechas de cursor y la tecla enter podremos explorar los distintos elementos de la barra de navegación de Google drive.

Para ir a la lista de ficheros debemos pulsar la tecla G y a continuación la tecla L.

Estando en la lista de ficheros podemos cambiar entre la vista de lista y la vista de cuadricula pulsando la tecla V. Para los usuarios de VoiceOver es recomendable pasar a la vista de lista.

Para ir a la vista de detalle del fichero seleccionado debemos pulsar la tecla G y luego la tecla D.

Recomendaciones para usuarios de VoiceOver

Aunque el navegador web Safari ofrece la accesibilidad que Google ha diseñado para este servicio si es cierto que el comportamiento de VoiceOver es mejor si se utiliza Google Chrome como navegador.

A veces lo que lee VoiceOver no coincide con lo que el foco de accesibilidad de Google drive está seleccionando. Esto se debe a que el foco de VoiceOver no se sincroniza bien con el foco virtual de accesibilidad creado por Google. Para solucionar esto podemos desactivar el control del cursor de VoiceOver provocando que los cursores de VoiceOver, el cursor de teclado y el cursor del ratón no se sincronicen. Esto se consigue pulsando la combinación Mayúsculas+Control+Opción+F3. Con esto el cursor de Google drive tendrá mejor acceso a VoiceOver.

Cómo comprimir y descomprimir ficheros zip desde la Terminal de Mac

La Terminal de MacOS es una herramienta muy importante que nos permite ampliar la funcionalidad de nuestros scripts y aplicaciones. Esto es así gracias a que desde nuestros scripts en AppleScript, Python o Swift podemos ejecutar comandos de la Terminal de MacOS.

Una de las operaciones más habituales a la hora de tratar con ficheros es la de comprimirlos o descomprimirlos. La Terminal de MacOS nos proporciona comandos para realizar estas operaciones.

En un artículo anterior vimos cómo utilizar la Terminal de MacOS ya que estos conocimientos serán necesarios para seguir este artículo.

Comprimiendo carpetas y ficheros

Para realizar las operaciones de compresión de ficheros y carpetas la Terminal de MacOS nos proporciona el comando zip.

Su uso es muy sencillo:

zip nombreDeFicheroComprimido nombreDeFicheroAComprimir

Por ejemplo, si queremos crear el fichero miCarpeta con todos los contenidos de la carpeta miCarpetaDeDocumentos el comando sería este:

zip miCarpeta miCarpetaDeDocumentos

El comando zip nos proporciona muchos más parámetros que nos permiten cambiar el nivel de compresión, incluir seguridad en el fichero y otras muchas más características del formato zip.

Descomprimiendo ficheros

Para descomprimir ficheros la Terminal de MacOS nos proporciona el comando unzip. Su uso es tan sencillo como ejecutar el comando seguido del nombre de fichero a descomprimir. Por ejemplo, vamos a descomprimir el fichero miCarpeta.zip que creamos antes.

unzip miCarpeta.zip

Con esta información ya podemos crear scripts que compriman carpetas y descompriman ficheros zip para poder realizar operaciones de automatización de copias de seguridad, subida y bajadas de ficheros en la Nube o cualquier cosa que se nos ocurra.

SwiftUI en Playgrounds para MacOS

En el artículo anterior se explicó cómo utilizar Playgrounds para MacOS y creamos nuestro primer Playground en el que saludábamos a todo el mundo.

En este artículo seguiremos saludando a todo el mundo pero con SwiftUI.

¿Qué es SwiftUI?

SwiftUI es la nueva librería de Apple para crear interfaces de usuario de forma declarativa. Esto implica que a diferencia de AppKit o UIKit, las librerías anteriores para crear interfaces de usuario para MacOS e iOS, el que sea declarativa facilita muchísimo la creación de estas interfaces.

En SwiftUI todos los elementos visibles se denominan vistas. Ventanas, botones, etiquetas de texto o casillas de verificación son vistas. Estas vistas se codifican como structs en Swift en la que cada struct tiene un cuerpo (body) en el que se declara cómo se verá la vista o qué vistas serán contenidas por esa vista que estamos declarando.

El código

A continuación se muestra el código para nuestro Playground.

import PlaygroundSupport
import SwiftUI

struct ContentView: View {
var body: some View {
Text("¡Hola mundo!")
}
}

PlaygroundPage.current.setLiveView(ContentView())

Lo más importante de este código para Playgrounds es la primera línea, en la que importamos un módulo para realizar operaciones para Playgrounds y la última línea donde indicamos al controlador de páginas de Playground qué vista de SwiftUI queremos mostrar en la pantalla.

El resto del código es SwiftUI estándar.

Conclusión

Con este simple Playground se nos abre la posibilidad de poder empezar a aprender SwiftUI y crear nuestras propias interfaces de usuario.