PDF de programación - Abstracción y encapsulamiento

Imágen de pdf Abstracción y encapsulamiento

Abstracción y encapsulamientográfica de visualizaciones

Publicado el 27 de Julio del 2020
1.725 visualizaciones desde el 27 de Julio del 2020
1,7 MB
29 paginas
Creado hace 3a (23/07/2020)
Abstracción y encapsulamiento

23 de julio de 2020

Debido a que es difícil recordar cada detalle sobre su software en todo mo-
mento, en este texto aprenderá a usar la abstracción y el encapsulamiento
para crear niveles de granularidad en su código para que pueda preocupar-
se por los detalles solo cuando lo necesite.

1. ¿Qué es la abstracción?

Cuando escuchas la palabra resumen, ¿en qué piensas? Por lo general, una
pintura de Jackson Pollock o una escultura de Calder pasa por mi mente.
El arte abstracto está marcado por la libertad de la forma concreta, que a
menudo solo sugiere un tema específico. La abstracción, entonces, sería el
proceso de tomar algo concreto y despojarlo de detalles. Cuando se habla
de abstracción en software, ¡esto es exactamente correcto!

1.1. La "caja negra"

A medida que desarrolles software, partes de él llegarán a representar con-
ceptos en su totalidad.

Una vez que haya terminado de desarrollar una función en particular, por
ejemplo, puede usarse para su propósito previsto una y otra vez sin tener

1

que pensar demasiado en cómo funciona. En este punto, la función se ha
convertido en una caja negra. Una caja negra es un cálculo o comporta-
miento que "simplemente funciona"; no es necesario abrirlo y examinarlo
cada vez que lo necesite (consulte la figura 1).

Figura 1: Tratar el software como una caja negra

Suponga que está creando un sistema de procesamiento de lenguaje na-
tural que determina si la revisión de un producto es positiva, negativa o
neutral. Tal sistema tiene muchos pasos en el camino, como se muestra en
la figura 21:

1. Divida la revisión en oraciones.

2. Divide cada oración en palabras o frases, generalmente llamadas fi-

chas.

3. Simplifique las variaciones de palabras a sus palabras raíz, proceso

llamado lematización.

4. Determinar la estructura gramatical de la oración.

5. Calcule la polaridad del contenido comparándolo con datos de entre-

namiento etiquetados manualmente.

6. Calcule la magnitud general de la polaridad.

1Hablamos aquí de un análisis lingüístico complejo y generalmente desconocido para
los ingenieros. Si analizamos el idioma español, la complejidad crece, debido a que su
estructura gramatical es mucho más compleja que la del inglés

2

7. Elija una determinación final positiva, negativa o neutral para la revi-

sión del producto.

Figura 2: Determinar revisión de un producto

Cada paso en el flujo de trabajo de análisis de sentimientos se compone de
muchas líneas de código. Al agrupar ese código en conceptos como "dividir
en oraciones" y "determinar la estructura gramatical", todo el flujo de tra-
bajo se vuelve más fácil de seguir que si estuviera tratando de comprender
todo el código a la vez. Si alguien quiere conocer los detalles de un paso
en particular en el flujo de trabajo, puede optar por profundizar. Esta idea
de abstraer una implementación es útil para la comprensión humana, pero
también es algo que se puede formalizar en código para producir resulta-
dos más estables.

La abstracción de un comportamiento en una función le permite cambiar
libremente cómo esa función calcula un resultado, siempre que las entra-
das y el tipo de datos de retorno permanezcan iguales. Esto significa que
si encuentra un error o una forma más rápida o precisa de realizar el cálcu-
lo, puede intercambiar ese comportamiento sin que sea necesario cambiar
otro código como resultado. Esto le brinda flexibilidad a medida que itera
en el software.

3

1.2. La abstracción es como una cebolla.

Usted vio en la figura 2 que cada paso en un flujo de trabajo generalmen-
te representa algún código de nivel inferior. Sin embargo, algunos de esos
pasos, como determinar la estructura gramatical de una oración, son bas-
tante complicados. Un código complejo como este a menudo se beneficiará
de las capas de abstracción; las utilidades de bajo nivel admiten comporta-
mientos pequeños, que a su vez admiten comportamientos más complica-
dos. Debido a esto, escribir y leer código en sistemas grandes a menudo es
como pelar una cebolla, revelando piezas de código más pequeñas y más
compactas debajo (figura 3).

Figura 3: La abstracción funciona en capas de complejidad

Los comportamientos pequeños y centrados que se utilizan una y otra vez
se sientan en las capas inferiores y necesitan cambiar con poca frecuencia.
Los grandes conceptos, la lógica empresarial y las partes móviles comple-
jas aparecen a medida que avanza; cambian con mayor frecuencia debido
a los requisitos cambiantes, pero aún hacen uso de los comportamientos
más pequeños.

Cuando comienzas, es común escribir un programa largo y procesal que ha-
ga un trabajo. Esto funciona bien cuando se realizan prototipos, pero revela

4

su poca capacidad de mantenimiento cuando alguien necesita leer las 100
líneas de código para descubrir dónde deben hacer un cambio o corregir
un error. La introducción de la abstracción con características del lengua-
je facilita la identificación del código relevante. En Python, características
como funciones, clases y módulos ayudan al comportamiento abstracto.

Veamos cómo el uso de funciones en Python ayuda con los dos primeros
pasos del flujo de trabajo de análisis de sentimientos.

Cuando trabaje a través del código en el listado 1, puede notar que hace
un trabajo similar dos veces: el trabajo de dividir una cadena por oración
y por palabras individuales en cada oración es bastante similar. Cada paso
realiza la misma operación, con diferentes entradas. Esta suele ser una
oportunidad para factorizar un comportamiento en su propia función.

Listado de código 1: Un procedimiento para dividir un párrafo en oraciones

import re

# Ref_1
product_review = ’’’This is a fine milk, but the product
line appears to be limited in available colors. I
could only find white.’’’

# Ref_2
sentence_pattern = re.compile(r’(.*?\.)(\s|$)’, re.DOTALL)
# Ref_3
matches = sentence_pattern.findall(product_review)
# Ref_4
sentences = [match[0] for match in matches]

# Ref_5
word_pattern = re.compile(r"([\w\-’]+)([\s,.])?")
for sentence in sentences:

matches = word_pattern.findall(sentence)

5

# Ref_6
words = [match[0] for match in matches]
print(words)

Ref_1 La revisión del producto como una cadena

Ref_2 coincide con oraciones completas que terminan con un punto

Ref_3 Encuentra todas las oraciones en la revisión

Ref_4 findall devuelve la lista de pares (oración, espacio en blanco)

Ref_5 coincidencias de palabras sueltas

Ref_6 Para cada oración, obtiene todas las palabras

Puede ver que el trabajo para encontrar las oraciones y las palabras es
similar, con el patrón para que coincida con ser la característica distintiva.
También hay que ocuparse de cierta logística, como lidiar con la salida de
findall, que satura el código. A simple vista, la intención de este código
podría no ser obvia.

Nota
En el procesamiento real del lenguaje natural, dividir oraciones y
palabras es difícil, de hecho, es tan difícil que el software para ana-
lizarlas generalmente usa modelos probabilísticos para determinar
el resultado. El modelado probabilístico utiliza una gran cantidad de
datos de prueba de entrada para determinar la exactitud probable
de un resultado particular. ¡El resultado podría no ser siempre el
mismo! Los lenguajes naturales son complejos, y se nota cuando
tratamos de hacer que las computadoras los entiendan.

¿Cómo puede ayudar la abstracción a mejorar el análisis de oraciones? Con
un poco de ayuda de las funciones de Python, puede simplificar esto un
poco. En la siguiente lista, la coincidencia de patrones se abstrae en una
función get_matches_for_pattern.

6

Listado de código 2: Análisis de oraciones refactorizado

import re

# Ref_1
def get_matches_for_pattern(pattern, string):

matches = pattern.findall(string)
return [match[0] for match in matches]

product_review = ’...’

sentence_pattern = re.compile(r’(.*?\.)(\s|$)’, re.DOTALL)
# Ref_2
sentences = get_matches_for_pattern(

sentence_pattern,
product_review,

)

word_pattern = re.compile(r"([\w\-’]+)([\s,.])?")
for sentence in sentences:

# Ref_3
words = get_matches_for_pattern(

word_pattern,
sentence

)
print(words)

Ref_1 Una nueva función para hacer la coincidencia de patrones

Ref_2 Ahora puede pedirle a la función que haga el trabajo duro.

Ref_3 Puede reutilizar la función siempre que lo necesite.

En el código de análisis actualizado, es más claro que la revisión se está
dividiendo en pedazos. Con variables bien nombradas y un ciclo claro y
corto. La estructura de la etapa del proceso también es clara. Alguien que

7

vea este código más tarde podrá leer el código principal, solo investigando
cómo funciona get_matches_for_pattern si tiene curiosidad o si desea
cambiarlo. La abstracción ha introducido claridad y reutilización de código
en este programa.

1.3. La abstracción es un simplificador.

Quiero enfatizar que la abstracción es útil para hacer que el código sea más
fácil de entender; esto se logra manteniendo las complejidades de algunas
funcionalidades ocultas hasta que quieras saber más. Esta es una técnica
utilizada para escribir documentación técnica, así como para diseñar las
interfaces utilizadas para interactuar con las bibliotecas de códigos.

Comprender el código es muy similar a comprender un pasaje de un libro.
Un pasaje tiene muchas oraciones, que son como las líneas de código. En
cualquier oración, puede encontrar una palabra con la que no está familia-
rizado. En el software, esta podría ser una línea de código que hace algo
nuevo o diferente de lo que estás acostumbrado. Cuando encuentre tales
palabras en los libros, puede buscarlas en el diccionario. El único equiva-
lente cuando se trata de procedimientos largos es el comentario diligente
del código.

Una forma de abordar esto es abstrayendo los bits relacionados de su có-
digo en funciones que indiquen claramente lo que hacen. Lo viste en los
listados 1 y 2.

La función get_matches_for_pattern obtiene las coincidencias para un
patrón dado de una cadena. Sin embargo,
  • Links de descarga
http://lwp-l.com/pdf17961

Comentarios de: Abstracción y encapsulamiento (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad