Principios de programación SOLID

En el diseño y desarrollo de software el paradigma de la programación orientada a objetos (POO) es el paradigma más utilizado a la hora de desarrollar software.

En la programación orientada a objetos podemos dividir un programa en muchas entidades con propiedades y funciones que se relacionan entre ellas.

La persona encargada de codificar cada una de estas clases y relaciones tiene total libertad a la hora de definir quién, cómo y dónde se resuelve cada mini problema.

Esta libertad de codificación facilita la resolución de los problemas que debe resolver una aplicación pero cuando el proyecto es grande la complejidad en el mantenimiento y ampliación de una aplicación crece notablemente haciendo muy dificultoso utilizar programación orientada a objetos de forma libre en proyectos de gran envergadura. 

Esto se debe a que las clases encargadas de un problema se vuelve demasiado grandes y las relaciones y dependencias entre clases cada vez son más complejas.

Principios para mantener el orden en nuestro código

A principios de la década de los 2000 Robert C. Martin propuso una metodología de codificación basada en 5 principios.

Tomando la primera letra de cada uno de esos principios sale el nombre de esta metodología que conocemos por principios SOLID.

Estos principios son:

  • S: Single responsibility principle o Principio de responsabilidad única
  • O: Open/closed principle o Principio de abierto/cerrado
  • L: Liskov substitution principle o Principio de sustitución de Liskov
  • I: Interface segregation principle o Principio de segregación de la interfaz
  • D: Dependency inversion principle o Principio de inversión de dependencia

Razones para utilizar SOLID

Aplicando estos principios a la hora de codificar un proyecto software mejorará su legibilidad y su mantenimiento tanto por desarrolladores individuales como por equipos de desarrollo.

En la industria actual del software el trabajo en equipo es algo imprescindible para un buen profesional y saber codificar un proyecto para que tenga un buen nivel de mantenimiento para incorporar nuevas características o localizar y resolver problemas en el código es una habilidad muy solicitada por los equipos de desarrollo de software. 

Veremos cada uno de estos principios en futuros artículos publicados en este blog.

Convierte de texto a voz con AppleScript

A veces puede que necesitemos convertir un fichero de texto a un fichero de audio utilizando las voces que vienen incluidas en MacOS. Para este tipo de situaciones Tyflos accessible software ha publicado un proyecto sencillo que realiza esta función.

Este proyecto incluye un script de AppleScript que te permite seleccionar una de las voces del sistema y abrir un fichero de texto en formato txt. El script realizará la conversión a fichero de audio con la voz seleccionada de forma automática.

Este proyecto es de caracter software libre por lo que cualquiera puede utilizarlo y participar para mejorarlo.

Puedes encontrar el script en la página del proyecto TTSConverter en Github.

Crea un script para contar tiempo en AppleScript

A veces puede que necesitemos contar cuánto tiempo ha transcurrido desde un evento a otro mientras utilizamos nuestro equipo con MacOS. Con AppleScript podemos crear un script que realice esta cuenta de tiempo.
Con lo que conocemos de AppleScript y lo visto en los artículos de Crea un cronómetro de cuenta atrás en AppleScript, Controlar variables no definidas en AppleScript y Obtener la hora actual en AppleScript de distintas formas podemos crear el siguiente script:

global timeValue, counting

on getTimeInSeconds()
	-- set t to (time of (current date))
	return (time of (current date)) as number
end getTimeInSeconds

on startCount()
	set counting to true
	set timeValue to getTimeInSeconds()
	say ("Contando")
end startCount

on stopCount()
	set numberOfSeconds to getTimeInSeconds() - timeValue as integer
	set numberOfHours to numberOfSeconds / 3600 as integer
	if numberOfHours > 0 then
		set numberOfSeconds to numberOfSeconds - (numberOfHours * 3600) as integer
	end if
	set numberOfMinutes to numberOfSeconds / 60 as integer
	if numberOfMinutes > 0 then
		set numberOfSeconds to numberOfSeconds - (numberOfMinutes * 60) as integer
	end if
	say ("Tiempo transcurrido " & numberOfHours & " horas, " & numberOfMinutes & " minutos y " & numberOfSeconds & " segundos.")
	set timeValue to 0
	set counting to false
end stopCount

on run
	try
		if counting = false then
			startCount
		else
			stopCount()
		end if
	on error number -2753
		startCount()
	end try
end run

Obtener la hora actual en AppleScript de distintas formas

En AppleScript podemos obtener la hora actual de diversas formas según qué necesitemos hacer.
Podemos obtener la hora actual en horas, minutos y segundos de la siguiente forma:

set tiempo to (time string of (current date))
display dialog tiempo

Pero podemos obtener el número de segundos transcurridos desde la madrugada hasta ahora:

set tiempoEnSegundos to (time of (current date)) as number
display dialog tiempoEnSegundos

Con cada una de las formas podemos realizar distintas funcionalidades y herramientas.

Controlar variables no definidas en AppleScript

Uno de los problemas de las variables globales o locales de AppleScript es controlar si la variable está definida o no. Veamos cómo podemos evitar errores de este tipo en AppleScript.

Ejemplo básico del problema

Imaginemos que tenemos una variable global llamada miVariable y queremos consultar si su valor es igual a 1. Tenemos el siguiente código:

global myVariable

if myVariable = 1 then
	display dialog "Vale 1"
end if

Si lo ejecutamos en el editor de AppleScript obtendremos el siguiente mensaje de error: Error de script La variable myVariable no está definida.

Controlando el error

Recordemos que en AppleScript para controlar errores tenemos la estructura Try/endTry.

Consultando la documentación técnica de AppleScript observamos que cuando el motor de ejecución de AppleScript encuentra una variable no definida se dispara el error número -2753.

Para controlar este error en concreto en AppleScript deberíamos codificar la siguiente estructura:

try
-- Código a ejecutar si todo va bien
on error number -2753
-- Código a ejecutar si la variable no está definida
end try

Con esta información podemos deducir que el código correcto para el ejemplo anterior sería algo como:

global myVariable

try
	if myVariable = 1 then
		display dialog "Vale 1"
	end if
on error number -2753
	display dialog "No vale 1"
end try

Presentación del dispositivo PRÓCER 3

La gente de PROCER celebrarán el próximo jueves 16 de diciembre de 2021 a las 16:00 de Argentina un webinar para el lanzamiento del nuevo dispositivo PROCER 3.
PROCER es una comunidad en donde profesionales y usuarios buscan trabajar en conjunto para desarrollar las mejores soluciones posibles.
Dicen estar convencidos de que no hay producto sin escuchar a cada uno de los usuarios y profesionales que los acompañan.

Una foto en la que se muestra a la izquierda unas gafas con una camara incorporada, en el centro se encuentra el dispositivo procer 3 y a la derecha el escaner portatil adaptado junto con un teclado externo.

El dispositivo

PROCER 3 es un dispositivo que permite la lectura de textos en diferentes contextos como material impreso y contenido digital. Además permite personalizar la experiencia de lectura para que se adapte lo más posible a los gustos y necesidades del usuario.
Esta versión del dispositivo utiliza una cámara que se incorpora a cualquier montura de gafas tradicional o en un dedo.
Este periférico potencia y simplifica las lecturas rápidas como prospectos de medicamentos, trámites gubernamentales, carteles, notas en papel, cheques, recibos bancarios, etc.
El dispositivo es compatible con un escáner portátil adaptado ideal para situaciones de estudio y trabajo.
Permite el almacenamiento en una unidad externa USB como un pendrive y almacenamiento en la nube.
Además, PRÓCER 3 tiene una botonera que facilita el uso del dispositivo, ofrece comandos por voz y posee compatibilidad con teclado externo.

El evento

El webinar se retransmitirá a través de Youtube y se realizará el día 16 a las 16:00 de Argentina en la página del Webinar de Procer 3 en Youtube.

También puedes encontrar más información en la página de Procer en Facebook.