Que encapsulan los datos para el buen diseño y facilidad de mantenimiento en swift

Considere el concepto de encapsulación, un concepto importante de la programación orientada a objetos. La idea detrás de la encapsulación es que los objetos deben ser opacos: No debería ser capaz de decir lo que hay dentro de datos de una aplicación, lo que la funcionalidad que contiene, o lo que las operaciones que realiza. Hacer esto hace que sus objetos flexibles y reutilizables.

Este concepto ha demostrado su valor en los últimos años. La arquitectura original de Objective-C consistía en marcos de objetos (aunque la palabra “marco” no se utilizó al principio). Los objetos eran opacas para que los ingenieros de software no podían mirar dentro de ellos (o, al menos, no se supone que). Un objeto llamado (por ejemplo) myObject, se supone que tienen algunos datos - tal vez llamada datos - y estos datos en sí era fuera de límites a los desarrolladores.

En lugar de acceder directamente a los datos, los desarrolladores aprendieron a enviar un mensaje a myObject para obtener sus datos. Por convención, el mensaje sería nombrado ObjectData y causaría myObject para devolver los datos de myObject.

Si se mira más de cerca a este diseño, myObject es la clase- ObjectData es el nombre de la función o método que sirve como una adquiridor. Otro método llamado (por defecto) setObjectData es el setter. El colocador toma un único parámetro (normalmente llamado (newObjectData).

Lo haría único acceso ObjectData utilizando cualquiera ObjectData conseguirlo o setObjectData para establecer o actualizarlo. Una consecuencia interesante y útil de este diseño es que ObjectData (los datos almacenados por myObject) No tiene por qué existir en absoluto.

Los descriptores de acceso (ObjectData y setObjectData) Puede trabajar con datos dinámicos que no se puede almacenar en realidad. Con la encapsulación de este tipo, que nunca tendría que saber si los datos se almacenan o se calcula sobre la marcha. Todo lo que necesita saber es que myObject obtiene los datos para usted con ObjectData y toma de datos de usted con setObjectData.

Mientras tanto descriptores de acceso funcionan, si se calcula sobre la marcha, almacenada en una base de datos, o incluso almacenada en la luna no importa: myObject encapsulados sus datos.

Otros idiomas se permitirá acceder a los datos directamente utilizando una sintaxis como myObject.objectData, pero debido a la referencia real a los datos, en este caso sería myObject.objectData () - un método o una función de llamada (tenga en cuenta los paréntesis al final) - encapsulación es completa.

La sintaxis hipotética muestra en los párrafos anteriores es una versión genérica de la sintaxis moderna o “sintaxis con punto” que se utiliza en Objective-C de la década de 1990 en adelante. Usando el estilo original de Objective-C (a veces llamado el formato de los mensajes) La forma de enviar el ObjectData Mensaje para myObject sería con código como este: [MyObject ObjectData].

Crear y preservar la encapsulación se convirtió en una parte importante del desarrollo de Objective-C. Es cierto que la encapsulación conserva muchas de las características de gran alcance de Objective-C y hace que la reutilización de código mucho más fácil, pero en algunos casos, la encapsulación puede ser un poco más complicado para escribir y, a veces requiere más recursos para ejecutar.

Por lo tanto, aunque la estructura no es complicada en particular, almacenar, recuperar, y el establecimiento de valor de una variable requiere tres elementos.

Los componentes de esta estructura son:

  • una variable real o código para calcularla (esto es invisible para el usuario)

  • un método getter para obtener el valor de la variable (esto es visible para usted)

  • un método de selección para ajustar el valor de la variable (esto es visible para usted)

En Objective-C 2 (publicado en 2007), propiedades con nombre fueron introducidos. Proporcionan una forma de simplificar esta estructura, pero son totalmente compatibles con él. Una propiedad llamada tiene un formato como este:

@property (fuerte no atómica,) Identificación del detailItem- @ propiedad (débil, no atómica) IBOutletUILabel * detailDescriptionLabel-

La propiedad comienza con la directiva del compilador @propiedad seguido de atributos memoria y el uso de paréntesis, tales como fuerte, débiles, solo lectura, y no atómica - los significados específicos no importan en este momento.

A continuación los atributos entre paréntesis son del tipo de la propiedad y luego su nombre. Para los tipos de objetos, se utiliza un puntero. El tipo de clase carné de identidad no es un puntero. Una vez más, los detalles no importan en este momento.

Lo que importa es que con una declaración de propiedad, el compilador es capaz de declarar y crear una forma automática variable de respaldo, que es la propia variable donde se almacenan los datos. También es capaz de crear un getter y setter utilizando las convenciones descritas anteriormente (el comprador es el nombre de la variable y el colocador es setMyVariable).

Varios convenios entran en juego aquí. Los nombres de variables comienzan con una letra minúscula. Si el nombre de la variable consta de varias palabras, palabras después de la primera comienzan con letras mayúsculas (esto se llama el caso de Carmel). Métodos y funciones comienzan con clases de letras-minúsculas comienzan con letras mayúsculas. Las convenciones se reúnen en el nombre de un setter.

Considere una variable llamada myVariable cuya colocador se llama setMyVariable. Esto se ajusta a la convención de que los métodos comienzan con letras minúsculas, y también se ajusta a la convención camelCase. Sin embargo, debido a que el encuentro de estas dos convenciones podría sugerir el nombre setmyVariable, camelCase anula otras convenciones.

Por lo tanto, las propiedades con nombre reducen la cantidad de tipificación requerida para utilizar las propiedades haciendo que el compilador de hacer el trabajo de creación de los descriptores de acceso getter y setter y de la creación de la variable de respaldo.

En algunos casos, los desarrolladores han necesitado un mayor control sobre las cosas. Los dos casos más comunes de este fueron los siguientes:

Video: Encapsulamiento de datos.mp4

  • Cuando un desarrollador necesita una variable respaldo que tener un cierto nombre y tiene que ser capaz de acceder a él directamente.

  • Cuando la incubadora o el comprador tiene que hacer algo más que establecer u obtener el valor de una variable.

Aquí es donde la complejidad comienza a entrar.

El sintetizador automatizado propiedad sintetiza una variable de soporte con el nombre de propiedad precedido por un guión. Por lo tanto, el valor predeterminado copias variable para mi propiedad es _mi propiedad. (Se puede establecer esto como una opción en la declaración de propiedad.)

También puede escribir sus propios métodos de acceso. Es común hacer que se realice tareas adicionales más allá de sus simples funciones de descriptor de acceso. Una de las más comunes de estas tareas es el establecimiento de una conexión de base de manera que un comprador puede obtener un valor previamente almacenado para su propiedad.

Hay muchas otras variaciones de esta estructura (incluyendo propiedades que no tienen las variables de respaldo, pero se basan simplemente en un captador para calcular o recuperar un valor en función de las necesidades). Y, para completar esta parte de la imagen, se puede mezclar y combinar con propiedades variables tradicionales (variables de desnudos no son parte de una propiedad declarada).

Muchos de los argumentos en contra del uso de las propiedades con nombre (y han sido amargo) se centran en el hecho de que el acceso a un valor de propiedades con nombre en la variable de respaldo requiere más recursos de la máquina que simplemente accediendo a una ubicación de memoria. Con los ordenadores de hoy en día - incluso en dispositivos móviles - esto puede parecer como una reacción extrema, pero ha sido común en algunos círculos.

Esto, entonces, es el mundo de las propiedades y las variables que se ocupa de Swift. Si todos sus complejidades y combinaciones son necesarios vale la pena discutir: Todos han encontrado usos en aplicaciones e incluso en los marcos de Apple que componen Cacao y táctil.

Hay otra capa de complejidad con respecto a las declaraciones de propiedades y variables. La mayoría de las declaraciones en las clases de código de Objective-C se colocan en un archivo de cabecera en el @interfaz sección. (Por convención, este archivo se denomina con un .h después de que el nombre de la clase.)

Video: encapsulamiento de datos

Bastante recientemente (a finales de la década de 2000) se convirtió en un lugar común para agregar una segunda @interfaz sección en el formato de una extensión de clase en el cuerpo principal del archivo de clase (el archivo con el .metro extensión). Declaraciones en el archivo de cabecera se pueden agrupar en secciones con diversos Acceso - público, privado, y protegido. público y privado las interfaces son sólo eso. protegido elementos de la interfaz son visibles para la clase en sí y para cualquiera de sus subclases.

Por último, dentro del archivo principal (el .metro archivo de extensión), se puede acceder a la variable de copias de seguridad mediante el uso de su nombre, al igual que en _myBackingVariable. Esto no pasa por el uso del captador y ahorra unos cuantos ciclos de la máquina. También puede esquivar cualquier procesamiento adicional de que el getter hace- esta convención puede ser muy útil.

Video: Como Limpiar Mi Pincel De Uñas De Acrilico / Clean My Acrylic Nail Brush

Este es el trasfondo de propiedades y variables en Objective-C y ahora en Swift.

Artículos Relacionados