Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
python:poo:poo [2023/07/04 11:04] – [4.1 Association unidirectionnelle] phil | python:poo:poo [2023/07/04 11:24] (Version actuelle) – [1.3 Les méthodes] phil |
---|
| |
<pane id="tab-python_3"> | <pane id="tab-python_3"> |
<callout type="warning" color="red" icon="true">**Il n'est pas possible de surcharger une méthode en Python**. À la place, on peut donner des valeurs par défaut aux arguments. Contrairement aux autres langages, l'objet sur lequel la méthode agit doit être nommé explicitement en premier paramètre. </callout> | <callout type="warning" title="self" color="red" icon="true">**Il n'est pas possible de surcharger une méthode en Python**. À la place, on peut donner des valeurs par défaut aux arguments. Contrairement aux autres langages, l'objet sur lequel la méthode agit doit être nommé explicitement en premier paramètre. </callout> |
| |
== 1.3.1 Le constructeur == | == 1.3.1 Le constructeur == |
Création d'une méthode statique getNombreDeMonstresEnVie() dans la classe Monstre pour connaître le nombre de monstres en vie. | Création d'une méthode statique getNombreDeMonstresEnVie() dans la classe Monstre pour connaître le nombre de monstres en vie. |
| |
{{ :python:poo:monstre2static.png?nolink|}} | {{ :python:poo:monstre2static.png?nolink|Réalisé avec PynSource}} |
<code python *.py> | <code python *.py> |
class Monstre: | class Monstre: |
Création d'une classe “Monstre” contenant trois attributs (+ le constructeur surchargé) et trois méthodes. | Création d'une classe “Monstre” contenant trois attributs (+ le constructeur surchargé) et trois méthodes. |
| |
{{ :python:poo:vsclasse3.png?nolink|Réalisé avec VSCode}} | {{ :python:poo:vsclasse3.png?nolink|Réalisé avec Visual Studio}} |
<code csharp *.cs> | <code csharp *.cs> |
class Monstre { | class Monstre { |
Création d'une méthode statique getNombreDeMonstresEnVie() dans la classe Monstre pour connaître le nombre de monstres en vie. \\ \\ | Création d'une méthode statique getNombreDeMonstresEnVie() dans la classe Monstre pour connaître le nombre de monstres en vie. \\ \\ |
| |
{{ :python:poo:vsclasse4.png?nolink|}} | {{ :python:poo:vsclasse4.png?nolink|Réalisé avec Visual Studio}} |
<code csharp *.cs> | <code csharp *.cs> |
class Monstre { | class Monstre { |
</code> | </code> |
| |
{{ :python:poo:dracula.png?nolink&100|}} | {{ :python:poo:dracula.png?nolink&100|Réalisé avec Visual Studio}} |
//Exemple// \\ | //Exemple// \\ |
<code csharp *.cs> | <code csharp *.cs> |
| |
==== 3. Principe d'encapsulation ==== | ==== 3. Principe d'encapsulation ==== |
<callout type="info" icon="true">En programmation, l’**encapsulation** désigne le principe de **regrouper des données brutes avec un ensemble de routines** permettant de les lire ou de les manipuler. Ce principe est souvent accompagné du **masquage** de ces données brutes afin de s’assurer que l’utilisateur ne contourne pas l’interface qui lui est destinée. <html><a href="https://fr.wikipedia.org/wiki/Encapsulation_(programmation)" target="_blank">Wikipédia</a></html></callout> | <callout type="info" title="Encapsulation" icon="true">En programmation, l’**encapsulation** désigne le principe de **regrouper des données brutes avec un ensemble de routines** permettant de les lire ou de les manipuler. Ce principe est souvent accompagné du **masquage** de ces données brutes afin de s’assurer que l’utilisateur ne contourne pas l’interface qui lui est destinée. <html><a href="https://fr.wikipedia.org/wiki/Encapsulation_(programmation)" target="_blank">Wikipédia</a></html></callout> |
| |
<tabs> | <tabs> |
| |
<pane id="tab-python_6"> | <pane id="tab-python_6"> |
{{ :python:poo:monstre.png?nolink&150|}} | {{ :python:poo:monstre.png?nolink&150|Réalisé avec PynSource}} |
| |
<callout type="warning" icon="true">En Python, pour **MASQUER** les attributs, c'est-à-dire les rendre **privés** afin qu'ils ne soient accessibles qu'aux méthodes de la classe, on fait précéder leur nom d'un double soulignement <nowiki>__</nowiki>.</callout> | <callout type="warning" icon="true">En Python, pour **MASQUER** les attributs, c'est-à-dire les rendre **privés** afin qu'ils ne soient accessibles qu'aux méthodes de la classe, on fait précéder leur nom d'un double soulignement <nowiki>__</nowiki>.</callout> |
Les attributs de la classe “Monstre” sont masqués. Pour y accéder sans passer par les méthodes de l'objet, on définit les **propriétés** //Pos_x//, //Pos_y// et //PointDeVie//. | Les attributs de la classe “Monstre” sont masqués. Pour y accéder sans passer par les méthodes de l'objet, on définit les **propriétés** //Pos_x//, //Pos_y// et //PointDeVie//. |
| |
{{ :python:poo:vsclasse5.png?nolink|}} | {{ :python:poo:vsclasse5.png?nolink|Réalisé avec Visual Studio}} |
<code csharp *.cs> | <code csharp *.cs> |
class Monstre | class Monstre |
* il possède un objet (référent) de type O2 dans ses champs | * il possède un objet (référent) de type O2 dans ses champs |
* cet objet est initialisé avec O2 lors de la création de O1 | * cet objet est initialisé avec O2 lors de la création de O1 |
{{ :python:poo:pyassociation1.png?nolink|}} | {{ :python:poo:pyassociation1.png?nolink|Réalisé avec PynSource}} |
| |
<code python exemple1.py> | <code python exemple1.py> |
* il possède un objet (référent) de type O2 dans ses champs | * il possède un objet (référent) de type O2 dans ses champs |
* cet objet est initialisé avec O2 lors de la création de O1 | * cet objet est initialisé avec O2 lors de la création de O1 |
{{ :python:poo:vsassociation1.png?nolink |}} | {{ :python:poo:vsassociation1.png?nolink |Réalisé avec Visual Studio}} |
| |
<code csharp *.cs> | <code csharp *.cs> |
| |
<pane id="tab-python_7b"> | <pane id="tab-python_7b"> |
{{ :python:poo:estomacdracula.png?nolink|}} | {{ :python:poo:estomacdracula.png?nolink|Réalisé avec PynSource}} |
Lecture du **diagramme de classes** : Dracula se** compose** de différents organes dont un estomac. | Lecture du **diagramme de classes** : Dracula se** compose** de différents organes dont un estomac. Si Dracula disparaît, son estomac aussi. |
{{ :python:poo:pycomposition.png?nolink |}} | {{ :python:poo:pycomposition.png?nolink |Réalisé avec PynSource}} |
| |
<code python *.py> | <code python *.py> |
| |
<pane id="tab-csharp_7b"> | <pane id="tab-csharp_7b"> |
{{ :python:poo:estomacdracula.png?nolink|}} | {{ :python:poo:estomacdracula.png?nolink|Réalisé avec Visual Studio}} |
Lecture du **diagramme de classes** : Dracula se** compose** de différents organes dont un estomac. | Lecture du **diagramme de classes** : Dracula se** compose** de différents organes dont un estomac. Si Dracula disparaît, son estomac aussi. |
{{ :python:poo:umlestomac.png?nolink |}} | |
| {{ :python:poo:umlestomac.png?nolink |Réalisé avec Visual Studio}} |
<code csharp *.cs> | <code csharp *.cs> |
namespace Enfer | namespace Enfer |
| |
<pane id="tab-python_7c"> | <pane id="tab-python_7c"> |
{{ :python:poo:vampireverre.png?nolink&150|}} | {{ :python:poo:vampireverre.png?nolink&150|Réalisé avec PynSource}} |
**Lecture du diagramme de classe** : l'objet verreDeSang est passé **provisoirement** à l'objet Dracula à l'aide de sa méthode boit. Contrairement à l'exemple précédent l'objet verreDeSang n'est pas associé à un lien permanent dans la classe Monstre. En effet, Dracula n'aura pas toujours un verre à la main ! | **Lecture du diagramme de classe** : l'objet verreDeSang est passé **provisoirement** à l'objet Dracula à l'aide de sa méthode boit. Contrairement à l'exemple précédent l'objet verreDeSang n'est pas associé à un lien permanent dans la classe Monstre. En effet, Dracula n'aura pas toujours un verre à la main ! |
{{ :python:poo:pyassociation2.png?nolink |}} | {{ :python:poo:pyassociation2.png?nolink |Réalisé avec PynSource}} |
| |
<code python exemple3.py> | <code python exemple3.py> |
| |
<pane id="tab-csharp_7c"> | <pane id="tab-csharp_7c"> |
{{ :python:poo:vampireverre.png?nolink&150|}} | {{ :python:poo:vampireverre.png?nolink&150|Réalisé avec Visual Studio}} |
**Lecture du diagramme de classe** : l'objet verreDeSang est passé **provisoirement** à l'objet Dracula à l'aide de sa méthode boit. Contrairement à l'exemple précédent l'objet verreDeSang n'est pas associé à un lien permanent dans la classe Monstre. En effet, Dracula n'aura pas toujours un verre à la main ! | **Lecture du diagramme de classe** : l'objet verreDeSang est passé **provisoirement** à l'objet Dracula à l'aide de sa méthode boit. Contrairement à l'exemple précédent l'objet verreDeSang n'est pas associé à un lien permanent dans la classe Monstre. En effet, Dracula n'aura pas toujours un verre à la main ! |
{{ :python:poo:VSAssociation2.png?nolink |}} | {{ :python:poo:VSAssociation2.png?nolink |Réalisé avec Visual Studio}} |
| |
<code csharp exemple3.cs> | <code csharp exemple3.cs> |