Ce qui ne l'abstraction moyenne dans la programmation?
Je suis en train d'apprendre python et je ne suis pas sûr de comprendre la déclaration suivante : "La fonction (y compris son nom) peut capturer notre mental chunking, ou de l'abstraction, de la problème."
C'est la partie qui est en gras, que je ne comprends pas la signification en termes de programmation. La citation vient de http://www.openbookproject.net/thinkcs/python/english3e/functions.html
How to think like a computer scientist, 3 édition.
Merci !
- L'utilisation de/signification du mot abstraction dans votre exemple est le même dans ou hors de le monde de la programmation.
- Simple: Si vous voyez un appel à une fonction dans votre code, dire
calculateFooBar(x, y)
, vous le savez (ou au moins avoir une idée) ce qui (éventuellement complexe) du code, sans se soucier de la lecture et de la compréhension de tout le code de l'implémentation de la fonction.
Vous devez vous connecter pour publier un commentaire.
L'Abstraction est un concept central dans l'ensemble de l'informatique. Sans abstraction, nous en serions encore à la programmation en code machine ou pire ont pas d'ordinateurs dans la première place. Donc, à mon humble avis c'est une très bonne question.
Qu'est-ce que abstraction
Abstraction signifie quelque chose pour donner des noms de choses, de sorte que le nom capture l'essentiel de ce qu'est une fonction ou un ensemble de programme.
Un exemple est donné dans le livre de référence, où il est dit
Oublier les tortues pendant un moment et penser à un dessin d'un carré. Si je vous dis pour dessiner un carré (sur le papier), on sait immédiatement de quoi faire:
Vous pouvez le faire sans d'autres questions parce que vous savez par cœur ce qu'est un carré est, sans me le dire vous, étape par étape. Ici, le mot carré est le abstraction de "dessiner un rectangle avec tous les côtés de la même longueur".
Abstractions profondes
Mais attendez, comment savez-vous ce qu'est un rectangle est? Eh bien, c'est une autre abstraction pour les éléments suivants:
Bien sûr, il va sur et sur - lignes, parallèle, perpendiculaire, connexion sont tous abstractions de concepts bien connus.
Maintenant, imaginez que chaque fois que vous voulez un rectangle ou un carré à tirer, vous devez donner la définition complète d'un rectangle, ou d'expliquer des lignes, des droites parallèles, perpendiculaires et des lignes de connexion -- il faudrait beaucoup trop de temps pour le faire.
La véritable puissance de l'abstraction
C'est la première d'alimentation des captages: ils font parler et à faire des choses beaucoup plus facile.
La deuxième puissance des abstractions vient de la belle propriété de composabilité: une fois que vous avez défini des abstractions, vous pouvez composer deux ou plus de deux abstractions pour former une nouvelle, plus grande abstraction: dites que vous êtes fatigué de dessiner des carrés, mais vous voulez vraiment tirer un maison. Supposons que nous avons déjà défini la triangle, alors nous pouvons définir:
Ensuite, vous voulez un village:
Oh, attendez, nous voulons une ville -- et nous avons un nouveau concept rue:
et ainsi de suite...
Comment est-ce que tous s'appliquent à programmming?
Si, au cours de la planification de votre programme (un processus connu sous le nom d'analyse et de conception), vous trouverez les bonnes abstractions pour le problème que vous essayez de résoudre, vos programmes deviennent plus courtes, donc plus facile à écrire et peut-être plus important encore - plus facile à lire. La façon de le faire est d'essayer et de saisir les concepts de base qui définissent vos problèmes-comme dans l'exemple (simplifié) de l'élaboration d'un maison, c'était carrés et triangles, pour dessiner un village il a été maisons.
Dans la programmation, nous définissons des abstractions comme des fonctions (et de certains autres éléments, comme les classes et les modules, mais concentrons-nous sur les fonctions pour l'instant). Une fonction essentiellement noms un ensemble de simples déclarations, si une fonction est essentiellement une abstraction -- voir les exemples dans votre livre pour plus de détails.
La beauté de tout cela
Dans la programmation, des abstractions peuvent faire ou défaire la productivité. C'est pourquoi, bien souvent, les fonctions les plus couramment utilisées sont rassemblées dans bibliothèques qui peuvent être réutilisés par d'autres. Cela signifie que vous n'avez pas à vous soucier des détails, vous avez seulement besoin de comprendre comment utiliser le prêt-à-abstractions. Évidemment, cela devrait rendre les choses plus facile pour vous, de sorte que vous pouvez travailler plus vite et donc à être plus productif:
Exemple:
Imaginer qu'il y est une bibliothèque graphique appelé "nicepic" qui contient des fonctions prédéfinies pour toutes les abstractions discuté ci-dessus: des rectangles, des carrés, des triangles, maison, village.
Que vous voulez créer un programme basé sur des abstractions ci-dessus que des peintures une belle photo d'une maison, tout ce que vous avez à écrire, c'est ceci:
De sorte que c'est seulement deux lignes de code pour obtenir quelque chose de beaucoup plus élaboré. N'est-ce pas merveilleux?
Espère que cette aide.
drawSquare
qui auront les étapes pour dessiner un carré, en composant les abstractions, vous pouvez avoir une autre fonctiondrawHouse
qui utilisedrawSquare
etdrawTriangle
,drawHouse
ici ne se soucient pas commentdrawSquare
est mis en œuvre, il importe seulement de savoir le résultat. En va de même pourdrawVillage
etdrawCity
.Une bonne façon de comprendre l'abstraction est à travers les classes abstraites.
Dire que nous sommes à écrire un programme qui modélise une maison. La maison va avoir plusieurs différentes pièces, ce qui nous représentent comme des objets. Nous définissons une classe pour une salle de Bain, Cuisine, Salon, Salle à Manger, etc.
Cependant, toutes ces Chambres, et donc partagent plusieurs propriétés (nombre de portes/fenêtres, pieds carrés, etc.) MAIS, une Pièce ne peut jamais exister sur son propre...c'est toujours des type de chambre.
Il est donc logique de créer une classe abstraite appelée Salle, qui contient les propriétés de toutes les chambres de l'action, et alors les classes de Cuisine, Salle de Séjour, etc, héritent de la classe abstraite Chambre.
Le concept d'une chambre est résumé et n'existe que dans notre tête, parce que toute pièce qui fait existe n'est pas une chambre, c'est une chambre à coucher ou une salle de séjour ou une salle de classe.
Nous voulons que notre code afin de représenter notre "mental chunking". Il rend tout beaucoup plus propre et plus facile à traiter.
Tel que défini sur wikipédia: Abstraction_(computer_science)
Fondamentalement, c'est de retirer les données du problème. Par exemple, pour dessiner un carré nécessite plusieurs étapes, mais je veux juste une fonction qui dessine un carré.
Disons que vous écrire une fonction qui reçoit un bouquet de texte en paramètre, puis lit les informations d'identification dans un fichier de config, puis se connecte à un serveur SMTP à l'aide de ces informations et envoie un mail à l'aide de ce texte.
La fonction doit être nommé sendMail(texte), pas parseTextReadCredentialsInFileConnecttosmtpthensend(texte) parce qu'il est plus facile de représenter ce qu'il fait de cette façon, vous-même et lors de la présentation de l'API à des collègues ou des utilisateurs... même si le 2e nom est plus précis, la première est une meilleure abstraction.
La meilleure façon de décrire quelque chose est-à-exemples d'utilisation:
Une fonction est rien de plus qu'une série de commandes pour obtenir des trucs fait. Fondamentalement, vous pouvez organiser un morceau de code qui fait une seule chose. Que la seule chose peut être à nouveau utilisé à plusieurs reprises et plus par le biais de votre programme.
Maintenant que votre fonction ne cette chose, vous devriez nom afin qu'il soit immédiatement identifiable comme pour ce qu'il fait. Une fois que vous avez nommé, vous pouvez ré-utiliser tous sur la place simplement en appelant son nom.
Puis d'utiliser cette fonction, vous pouvez simplement faire quelque chose comme:
Ce qui se passe si l'on veut que cette écorce 4 fois? Eh bien, vous pourriez écrire écorce(); 4 fois.
Ou vous pourriez modifier votre fonction à accepter un certain type d'entrée, de changer la façon dont il fonctionne.
Alors nous pourrions appeler une fois:
Quand on commence à parler de la Programmation Orientée Objet (POO) abstraction signifie quelque chose de différent. Vous découvrirez que la partie plus tard 🙂
Abstraction: est un concept très important tant au niveau matériel et logiciel.
Importance: Nous, les humains ne pouvez pas vous souvenir de toutes les choses de tous les temps. Par exemple, si votre ami parle à 30 aléatoire des nombres rapidement et vous invite à ajouter tous, il ne sera pas possible pour vous. La raison? Vous pourriez ne pas être en mesure de garder tous ces chiffres en tête. Vous pourriez écrire ces chiffres sur un papier, même alors, vous serez en ajoutant le droit de la plupart des chiffres un par un en ignorant la gauche chiffres à un moment et puis en ignorant le droit de la plupart des chiffres à l'autre le temps d'avoir ajouté le droit de la plupart des autres.
Il montre qu'à une époque, nous, les humains peuvent l'accent à un certain point particulier tout en ignorant ceux qui sont déjà résolus et le déplacement de l'accent vers ce qui sont laissés à résoudre.
Ignorant moins important et en concentrant le plus important (pour le moment et dans un contexte particulier) est appelé l'Abstraction
Ici est de savoir comment l'abstraction travaille dans la programmation.
Ci-dessous est le monde le célèbre programme "hello world" en C langue:
C'est le plus simple et le plus souvent le premier programme d'ordinateur un programmeur écrit. Lorsque vous compilez et exécutez ce programme sur l'invite de commande, la sortie peut apparaître comme ceci:
Voici les graves questions
gcc-o bonjour bonjour.c
Et il a converti votre anglais comme langage C code en code binaire, et vous pourriez exécuter ce code en donnant la commande:
./bonjour
Donc, pour l'écriture d'une application dans un programme C, vous n'avez jamais besoin de savoir comment C compilateur convertit en langage C code en code binaire. Si vous avez utilisé le compilateur GCC comme une abstraction.
Je n'ai pas d'étendre la réponse à l'abstraction du système d'exploitation, le noyau, du micrologiciel et du matériel pour des raisons de simplicité.
De choses à retenir:
Tout en faisant de la programmation, vous pouvez utiliser l'abstraction dans une variété de façons de rendre votre programme simple et facile.
Exemple 1: Vous pouvez utiliser un constante l'abstraction de la valeur de PI 3.14159 dans votre programme car PI est facile à retenir que 3.14159 pour le reste du programme
Exemple 2: Vous pouvez écrire un fonction qui renvoie le carré d'un nombre donné et puis n'importe qui, y compris vous, pouvez utiliser cette fonction en lui donnant de l'entrée de paramètres et d'obtenir une valeur de retour à partir d'elle.
Exemple 3: En programmation orientée Objet (POO), comme Java, vous pouvez définir une objet qui encapsule les données et les méthodes, et vous pouvez utiliser cet objet en appelant ses méthodes.
Exemple 4: de Nombreuses applications vous fournir API qui vous permet d'interagir avec l'application. Lorsque vous utilisez des méthodes de l'API, vous n'avez jamais besoin de savoir comment ils sont mis en œuvre. Si l'abstraction est là.
À travers tous les exemples, vous pouvez réaliser l'importance de l'abstraction et de la façon dont il est mis en œuvre dans la programmation. Un truc important à retenir est que l'abstraction est contextuelle, c'est à dire toujours en changement que par le contexte
Dans une phrase simple, je peux dire que L'essence de l'abstraction est d'extraire des propriétés essentielles en omettant inessentielle de détails. Mais pourquoi devrait-on omettre inessentielle de détails? La motivation principale est de prévenir les risques de changement.