• No results found

State Machine for Requesting BACnet User (client) 61

In document BACnet Network Security (Page 61-68)

24.19   Security Keys 53

5.4.4 State Machine for Requesting BACnet User (client) 61

Este concepto de caja negra utilizado en física, infor- mática y disciplinas técnicas o tecnológicas en gene- ral, aunque está relacionado, no debe confundirse con el 'Cajanegrismo'; éste es un concepto más vinculado a la

sociologíaque hace referencia al hecho de que las perso- nas solemos olvidarnos del funcionamiento interno de las cosas (generalmente nuevos dispositivos tecnológicos) a medida que nos familiarizamos con ellos y terminamos por asimilarlos como de uso cotidiano. A este proceso de olvidar el funcionamiento interno de las cosas se le cono- ce con el nombre de 'cajanegrizar'.

Se podría decir que la principal diferencia entre ambos conceptos es que mientras el primero, el estudio de un sis- tema como una caja negra, es un proceso deabstracción, el segundo, el 'cajanegrismo', es más bien un proceso de

olvido.

20.5 Véase también

Teoría de sistemas Modularidad

20.5. VÉASE TAMBIÉN 39

Interfaz

Interfaz de usuario Diseño estructurado Caja blanca (sistemas) AbstractoyAbstracción Cajanegrizar

CamelCase

Ejemplo de CamelCase en un indicador.

CamelCase es un estilo de escritura que se aplica a frases

o palabras compuestas. El nombre se debe a que las ma- yúsculas a lo largo de una palabra en CamelCase se ase- mejan a las jorobas de uncamello. El nombre CamelCase se podría traducir como Mayúsculas/Minúsculas Camello. El término case se traduce como“caja tipográfica”, que a su vez implica si una letra es mayúscula o minúscula y tiene su origen en la disposición de los tipos móviles en casilleros o cajas.

Existen dos tipos de CamelCase:

• UpperCamelCase, cuando la primera letra de cada

una de las palabras es mayúscula. Ejemplo: Ejem-

ploDeUpperCamelCase.

• lowerCamelCase, igual que la anterior con la excep-

ción de que la primera letra es minúscula. Ejemplo:

ejemploDeLowerCamelCase.

21.1 Usos

• En varioslenguajes de programación Java .NET C C++ Python C# Objective-C ActionScript PHP

• En las primeras herramientas wiki

• En nombres de empresas tales como BellSouth

CompuServe LinuxCabal

Microsoft, antiguamente MicroSoft

PriceWaterhouseCoopers OmegaSoft VaxaSoftware La Sexta eDreams • En algunoshashtag

21.2 Enlaces externos

Primer wiki, creado porWard Cunningham Caja alta y baja en el DRAE.

Capítulo 22

Caml

Caml (Originalmente un acrónimo para Categorical Abstract Machine Language, en español Lenguaje Má- quina Abstracto Categórico) es un dialecto de lafamilia de

losmeta lenguajes, desarrollado enINRIAy anteriormen- te enENS.

Como muchos descendientes delML, Caml es un len- guaje de tipado estático, evaluación estricta, y utiliza

administración de memoria automática.

La primera implementación de Caml enLispfue apodada “CAML pesado”debido a los requisitos de memoria y

CPUrelativos a su sucesor “Caml Light”, aquello fue implementado enCpor Xavier Leroy y Damien Doligez. Además de una reescritura completa,“CAML Special

Light”añadió un potente sistema de módulos al núcleo del lenguaje.

Actualmente, la implementación principal de Caml es

OCaml, el cual añade muchas características nuevas al lenguaje, entre ellas unacapa de objeto.

22.1 Ejemplos

Lo siguiente, # representa el prompt de OCaml.

22.1.1

Hola Mundo

print_endline “Hello World!";;

22.1.2

Función factorial (recursividad y

programación puramente funcio-

nal)

Muchas funciones matemáticas, como el factorial, son re- presentadas más naturalmente en una forma puramente funcional. La siguiente función recursiva, puramente fun- cional implementa la operaciónfactorialen Caml: let rec fact n = if n=0 then 1 else n * fact(n - 1);; La función puede ser escrita equivalentemente utilizando

patrones de emparejamiento:

let rec fact = function | 0 -> 1 | n -> n * fact(n - 1);; Esta última forma es la definición matemática defactorial

como una relación de recurrencia.

Note que el compilador infirió el tipo de esta función para ser int -> int, significa que esta función mapea enteros a enteros. Por ejemplo, 12! Es:

# fact 12;; - : int = 479001600

22.1.3 Derivación numérica (funciones de

alto orden)

Desde que OCaml es unlenguaje de programación fun- cional, es fácil crear y repasar funciones en programas de OCaml. Esta capacidad tiene un número enorme de apli- caciones. Calcular laderivada numéricade una función es una de ellas. La funciónd en Caml computa la derivada numérica de una función dada f en un punto dado x: let d delta f x = (f (x +. delta)−. f (x −. delta)) /. (2. *.

delta);;

Esta función requiere un valor infinitesimal delta. Una buena elección para delta es la raíz cúbica delépsilon de la máquina.

El tipo de la función d indica que ésta mapea un tipo de dato flotante a otra función del mismo tipo (float -> float) -> float -> float. Esto nos permite aplicar argumen- tos parcialmente. Este estilo funcional es conocido como

currificación.En este caso, es útil al aplicar parcialmente el primer argumento delta a d, para obtener una función más especializada:

# let d = d (sqrt epsilon_float);; val d : (float -> float) -> float -> float = <fun>

Note que el tipo inferido indica que la sustitución d espe- ra una función del tipo flotante float -> float como primer argumento. Podemos computar una aproximación numé- rica a la derivada de la función x3− x − 1 en el punto

x = 3con: 41

# d (fun x -> x *. x *. x−. x −. 1.) 3.;; - : float = 26.

La respuesta correcta es: f′(x) = 3x2− 1 → f(3) =

27− 1 = 26

La función d se denomina “función de alto orden”ya que acepta otra función (f) como argumento.

Los conceptos de funciones currificadas y de alto orden son útiles evidentemente en programas matemáticos. De hecho, estos conceptos son igualmente aplicables a otras formas de programación y pueden ser empleados en códi- go de factor mucho más agresivamente, resultando epro- gramas más cortos y con menos errores.

22.1.4

Transformada

Wavelet

discreta

(concordancia de patrones)

La transformadaWavelet de Haardede una lista de nú- meros enteros de potencia en base dos puede ser imple- mentada muy sucintamente en Caml y es un ejemplo ex- celente del uso de la concordancia de patrones sobre lis- tas, tomando pares de elementos (h1 y h2) del frente y almacenando sus sumas y diferencias en las listas s y d, respectivamente:

# let haar l = let rec aux l s d = match l, s, d with [s], [], d -> s :: d | [], s, d -> aux s [] d | h1 :: h2 :: t, s, d -> aux t (h1 + h2 :: s) (h1 - h2 :: d) | _ -> invalid_arg “haar”in aux l [] [];; val haar : int list -> int list = <fun>

Por ejemplo:

# haar [1; 2; 3; 4;−4; −3; −2; −1];; - : int list = [0; 20; 4; 4;−1; −1; −1; −1]

El patrón de emparejamiento permite transformaciones complicadas para ser representadas claramente y sucinta- mente (brevemente). Además, el compilador de OCaml realiza concordancia de patrones en un código muy efi- caz, el tiempo en el que los programas arrojan resultados es más corto y más rápido que el código equivalente es- crito con una estructura "switch-case" (Cardelli 1984, p. 210.).

22.2 Véase también

OCaml ML F#

22.3 Referencias

Cardelli, Luca (1984).Compiling a functional language ACM simposio en LISP y programación funcional, Asso-

ciation of Computer Machinery.

22.4 Enlaces externos

• [Repositorio de Caml en Github]

• [Sitio oficial de Caml]

• [Tutoriales de caml (inglés)]

22.4.1 Libros

The Functional Approach to Programming with Camlby Guy Cousineau and Michel Mauny.

Capítulo 23

Cierre de exclusión mutua

Enciencias de la computación, los cierres de exclusión

mutua o candados son un mecanismo de sincronización

que limita el acceso a un recurso compartido por varios procesos ohilosen un ambiente de ejecución concurrente, permitiendo así laexclusión mutua.

Cuando un elemento es compartido por más de un hilo, pueden ocurrircondiciones de carrerasi el mismo no es protegido adecuadamente. El mecanismo más simple pa- ra la protección es el cierre o cerrojo. En general cuando debe protegerse un conjunto de elementos, se le asocia un cerrojo. Cada proceso/hilo para tener acceso a un ele- mento del conjunto, deberá bloquear, con lo que se con- vierte en su dueño. Esa es la única forma de ganar acceso. Al terminar de usarlo, el dueño debe desbloquear, para permitir que otro proceso/hilo pueda tomarlo a su vez. Es posible que mientras un proceso/hilo esté accedien- do a un recurso (siendo por lo tanto dueño del cerrojo), otro proceso/hilo intente acceder. Esta acción debe espe- rar hasta que el cerrojo se encuentre libre, para garanti- zar la exclusión mutua. El proceso/hilo solicitante queda entonces en espera o pasa a estado de bloqueo según el algoritmo implementado. Cuando el dueño del cerrojo lo desbloquea puede tomarlo alguno de los procesos/hilos que esperaban.

Este mecanismo se puede ver en un ejemplo de la vida real. Supongamos un baño público, donde sólo puede en- trar una persona a la vez. Una vez dentro, se emplea un cierre para evitar que entren otras personas. Si otra per- sona pretende usar el baño cuando está ocupado, debe- rá quedar esperando a que la persona que entró anterior- mente termine. Si más personas llegaran, formarían una cola (del tipoFIFO) y esperarían su turno. En informáti- ca, el programador no debe asumir este tipo de compor- tamiento en la cola de espera.

El cerrojo, usado de esta manera, forma unasección crí- ticaen cada proceso/hilo, desde que es tomado hasta que se libera. En el ejemplo del baño, dentro de la sección crítica se encuentran las funciones que se realizan gene- ralmente dentro de este tipo de instalaciones sanitarias. Como garantizan la exclusión mutua, muchas veces se los denomina mutex (por mutual exclusion).

En general hay un número de restricciones sobre los ce- rrojos, aunque no son las mismas en todos los sistemas.

Estas son:

• Sólo el dueño de un cerrojo puede desbloquearlo • La readquisición de un cerrojo no está permitida

Algo muy importante es que todos los procesos/hilos de- ben utilizar el mismo protocolo para bloquear y desblo- quear los cerrojos en el acceso a los recursos, ya que si mientras dos procesos/hilos utilizan el cerrojo de forma correcta, existe otro que simplemente accede a los datos protegidos, no se garantiza la exclusión mutua y pueden darse condiciones de carrera y errores en los resultados.

23.1 Primitivas y uso

Las funciones de los cerrojos en general son tres: init(),

lock() y unlock(). El cerrojo se inicializa con la función init(). Luego cada proceso/hilo debe llamar a la función lock() antes de acceder a los datos protegidos por el cierre.

Al finalizar su sección crítica, el dueño del cerrojo debe desbloquearlo mediante la función unlock().

In document BACnet Network Security (Page 61-68)

Related documents