sintaxis programacion poo orientado orientada objetos objeto los herencia elementos ejemplos definir como codigo python terminology

python - programacion - ¿Qué significa abstracción en la programación?



programacion orientada a objetos python pdf (6)

Estoy aprendiendo Python y no estoy seguro de entender la siguiente afirmación: "La función (incluido su nombre) puede capturar nuestra fragmentación mental o abstracción del problema ".

Es la parte que está en negrita que no entiendo el significado en términos de programación. La cita proviene de http://www.openbookproject.net/thinkcs/python/english3e/functions.html

Cómo pensar como un científico de la computación, 3 edición.

Gracias !


Como se define en wikipedia: Abstraction_ (computer_science)

La abstracción trata de restar detalles a partir de un patrón común para que los programadores puedan trabajar cerca del nivel del pensamiento humano, omitiendo los detalles que importan en la práctica, pero que no son exigentes para resolver el problema.

Básicamente está eliminando los detalles del problema. Por ejemplo, dibujar un cuadrado requiere varios pasos, pero solo quiero una función que dibuje un cuadrado.


Digamos que escribes una función que recibe un montón de texto como parámetro, luego lee las credenciales en un archivo de configuración, luego se conecta a un servidor SMTP usando esas credenciales y envía un correo usando ese texto.

La función debe llamarse sendMail (texto) , no parseTextReadCredentialsInFileConnectToSmtpThenSend (texto) porque es más fácil representar lo que hace de esta manera, a usted mismo y al presentar la API a los compañeros de trabajo o usuarios ... aunque el segundo nombre es más preciso , el primero es una mejor abstracción.


La abstracción es un concepto central en todas las ciencias de la computación. Sin abstracción, todavía estaríamos programando en código de máquina o peor aún no tenemos computadoras en primer lugar. Así que en mi humilde opinión esa es una muy buena pregunta.

Qué es la abstracción

Resumir algo significa dar nombres a las cosas, de modo que el nombre capture el núcleo de lo que hace una función o un programa completo.

Un ejemplo se da en el libro al que hace referencia, donde dice

Supongamos que estamos trabajando con tortugas, y una operación común que necesitamos es dibujar cuadrados. "Dibujar un cuadrado" es una abstracción, o un fragmento mental, de varios pasos más pequeños. Así que vamos a escribir una función para capturar el patrón de este "bloque de construcción":

Olvídate de las tortugas por un momento y solo piensa en dibujar un cuadrado. Si le digo que dibuje un cuadrado (en papel), inmediatamente sabe qué hacer:

  • dibuja un cuadrado => dibuja un rectángulo con todos los lados de la misma longitud.

Puedes hacer esto sin más preguntas porque sabes de memoria qué es un cuadrado , sin que te lo diga paso a paso. Aquí, la palabra cuadrado es la abstracción de "dibujar un rectángulo con todos los lados de la misma longitud".

Las abstracciones son profundas

Pero espera, ¿cómo sabes qué es un rectángulo ? Bueno, esa es otra abstracción para lo siguiente:

  • rectangle => dibuje dos líneas paralelas entre sí, de la misma longitud, y luego agregue otras dos líneas paralelas perpendiculares a las otras dos líneas, nuevamente de la misma longitud pero posiblemente de diferente longitud que las dos primeras.

Por supuesto, sigue y sigue: las líneas , el paralelo , la perpendicular , la conexión son abstracciones de conceptos bien conocidos.

Ahora, imagine cada vez que quiere dibujar un rectángulo o un cuadrado, debe dar la definición completa de un rectángulo, o explicar líneas, líneas paralelas, líneas perpendiculares y líneas de conexión; tomaría demasiado tiempo hacerlo.

El verdadero poder de la abstracción

Ese es el primer poder de las abstracciones: hacen que hablar y hacer las cosas sea mucho más fácil.

El segundo poder de las abstracciones proviene de la agradable propiedad de la capacidad de compilación : una vez que ha definido las abstracciones, puede componer dos o más abstracciones para formar una nueva abstracción más grande: decir que está cansado de dibujar cuadrados, pero que realmente quiere dibujar una casa . Supongamos que ya hemos definido el triángulo , entonces podemos definir:

  • house => dibuja un cuadrado con un triángulo en la parte superior

Luego, quieres un pueblo:

  • pueblo => dibujar varias casas una al lado de la otra

Oh, espera, queremos una ciudad, y tenemos una nueva calle conceptual:

  • city => dibuja muchas aldeas cercanas, llena espacios vacíos con más casas , pero deja espacio para calles
  • street => (alguna definición de calle)

y así...

¿Cómo se aplica todo esto a la programación?

Si en el curso de la planificación de su programa (un proceso conocido como análisis y diseño ), encuentra buenas abstracciones para el problema que está tratando de resolver, sus programas se acortan, por lo tanto, es más fácil de escribir y, lo que es más importante, más fácil de leer. La forma de hacerlo es tratar de captar los principales conceptos que definen sus problemas, como en el ejemplo (simplificado) de dibujar una casa , esto era cuadrados y triángulos , dibujar un pueblo que era casas .

En la programación, definimos las abstracciones como funciones (y algunas otras construcciones como clases y módulos, pero centrémonos en las funciones por ahora). Una función esencialmente nombra un conjunto de declaraciones individuales, por lo que una función es esencialmente una abstracción; consulte los ejemplos en su libro para obtener más detalles.

La belleza de todo esto

En la programación, las abstracciones pueden hacer o romper la productividad. Es por eso que muchas veces, las funciones comúnmente utilizadas se recopilan en bibliotecas que pueden ser reutilizadas por otros. Esto significa que no tiene que preocuparse por los detalles, solo necesita comprender cómo usar las abstracciones hechas. Obviamente, eso debería facilitarte las cosas, para que puedas trabajar más rápido y ser más productivo:

Ejemplo :

Imagine que hay una biblioteca de gráficos llamada "nicepic" que contiene funciones predefinidas para todas las abstracciones discutidas anteriormente: rectángulos, cuadrados, triángulos, casa, aldea.

Digamos que quiere crear un programa basado en las abstracciones anteriores que pinta una buena imagen de una casa, todo lo que tiene que escribir es esto:

import nicepic draw_house()

Entonces eso son solo dos líneas de código para obtener algo mucho más elaborado. ¿No es eso simplemente maravilloso?

Espero que esto ayude.


La mejor manera de describir algo es usar ejemplos:

Una función no es más que una serie de comandos para hacer las cosas. Básicamente puedes organizar un trozo de código que hace una sola cosa. Esa única cosa puede ser reutilizada una y otra vez a través de su programa.

Ahora que su función hace esto, debe nombrarlo para que sea identificable al instante en cuanto a lo que hace. Una vez que lo haya nombrado, puede volver a usarlo en cualquier lugar simplemente llamándolo por su nombre.

def bark(): print "woof!"

Luego, para usar esa función, puedes hacer algo como:

bark();

¿Qué pasa si quisiéramos que ladrara 4 veces? Bueno, podrías escribir ladrar (); 4 veces.

bark(); bark(); bark(); bark();

O puede modificar su función para aceptar algún tipo de entrada, para cambiar la forma en que funciona.

def bark(times): i=0 while i < times: i = i + 1 print "woof"

Entonces podríamos simplemente llamarlo una vez:

bark(4);

Cuando comenzamos a hablar sobre la abstracción de Programación Orientada a Objetos (OOP) significa algo diferente. Descubrirás esa parte más tarde :)


Una gran manera de entender la abstracción es a través de clases abstractas.

Digamos que estamos escribiendo un programa que modela una casa. La casa tendrá varias salas diferentes, que representaremos como objetos. Definimos una clase para un baño, cocina, sala de estar, comedor, etc.

Sin embargo, todas estas son habitaciones, y por lo tanto comparten varias propiedades (número de puertas / ventanas, pies cuadrados, etc.) PERO, una habitación nunca puede existir por sí misma ... siempre va a ser algún tipo de habitación.

Entonces tiene sentido crear una clase abstracta llamada Habitación, que contendrá las propiedades que todas las habitaciones comparten, y luego las clases de Cocina, Sala de estar, etc., heredarán la clase de la clase abstracta.

El concepto de una habitación es abstracto y solo existe en nuestra cabeza, porque cualquier habitación que realmente existe no es solo una habitación; es un dormitorio o una sala de estar o un aula.

Queremos que nuestro código represente nuestro "fragmentación mental". Hace todo mucho más ordenado y más fácil de tratar.


Abstracción: es un concepto muy importante tanto en hardware como en software.

Importancia: Nosotros los humanos no podemos recordar todas las cosas todo el tiempo. Por ejemplo, si su amigo habla 30 números al azar rápidamente y le pide que los agregue todos, no será posible para usted. ¿Razón? Es posible que no puedas mantener todos esos números en mente. Puede escribir esos números en un papel, incluso entonces, agregará la mayoría de los dígitos uno por uno ignorando los dígitos de la izquierda a la vez y luego ignorará los dígitos de la derecha en el otro momento al haber agregado los más adecuados.

Demuestra que en algún momento nosotros, los humanos, podemos enfocarnos en un tema en particular, ignorando aquellos que ya están resueltos y moviéndonos hacia lo que queda por resolver.

Ignorar lo menos importante y enfocar lo más importante (por el momento y en un contexto particular) se llama Abstracción

Así es como funciona la abstracción en la programación.

A continuación se muestra el famoso programa mundial hello del mundo en lenguaje C:

//C hello world example hello.c #include <stdio.h> int main() { printf("Hello world/n"); return 0; }

Este es el programa informático más simple y por lo general el primero que escribe un programador. Cuando compila y ejecuta este programa en el símbolo del sistema, el resultado puede aparecer así:

Aquí están las preguntas serias

  1. La computadora solo entiende el código binario ¿cómo fue capaz de ejecutar su código similar al inglés? Puede decir que compiló el código en binario usando el compilador. ¿Escribiste un compilador para que tu programa funcione? No. No necesitabas hacerlo. Instaló el compilador GNU C en su sistema Linux y lo usó simplemente dando un comando:

gcc -o hello hello.c

Y convirtió tu inglés como código de lenguaje C en código binario y podrías ejecutar ese código dando un comando:

./Hola

Entonces, para escribir una aplicación en el programa C, nunca necesita saber cómo el compilador de C convierte el código de lenguaje C en código binario. Entonces usaste el compilador GCC como una abstracción.

  1. ¿Escribiste el código para las funciones main () y printf ()? No. Ambos ya están definidos por otra persona en el lenguaje C. Cuando ejecutamos un programa C, busca la función main () como punto de partida del programa, mientras que la función printf () imprime la salida en la pantalla de la computadora y ya está definida en stdio.h, por lo que debemos incluirla en el programa. Si las dos funciones no estuvieran ya escritas, teníamos que escribirlas solo para imprimir dos palabras y las computadoras serían las máquinas más aburridas de la historia. Aquí de nuevo usas abstracción, es decir, no necesitas saber cómo printf imprime texto en el monitor y todo lo que necesitas saber es cómo dar entrada a la función printf para que muestre el resultado deseado.

No amplié la respuesta a la abstracción del sistema operativo, kernel, firmware y hardware por simplicidad.

Cosas para recordar:

Mientras hace la programación, puede usar la abstracción de varias maneras para hacer que su programa sea simple y fácil.

Ejemplo 1: puede usar una constante para resumir el valor de PI 3.14159 en su programa porque PI es fácil de recordar que 3.14159 para el resto del programa

Ejemplo 2: Puede escribir una función que devuelve el cuadrado de un número dado y luego cualquiera, incluyéndolo a usted, puede usar esa función dándole entrada como parámetros y obteniendo un valor de retorno de ella.

Ejemplo 3: en una programación orientada a objetos (OOP), como Java, puede definir un objeto que encapsula datos y métodos y puede usar ese objeto invocando sus métodos.

Ejemplo 4: Muchas aplicaciones le proporcionan API que usa para interactuar con esa aplicación. Cuando utiliza métodos de API, nunca necesita saber cómo se implementan. Entonces la abstracción está ahí.

A través de todos los ejemplos, puede darse cuenta de la importancia de la abstracción y cómo se implementa en la programación. Una cosa clave para recordar es que la abstracción es contextual, es decir, sigue cambiando según el contexto