<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://haypo.alwaysdata.net:443/wiki/skins/common/feed.css?63"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>http://haypo.alwaysdata.net:443/wiki/index.php?action=history&amp;feed=atom&amp;title=Conseils_de_programmation_orient%C3%83%C2%A9e_objet</id>
		<title>Conseils de programmation orientÃ©e objet - Historique des versions</title>
		<link rel="self" type="application/atom+xml" href="http://haypo.alwaysdata.net:443/wiki/index.php?action=history&amp;feed=atom&amp;title=Conseils_de_programmation_orient%C3%83%C2%A9e_objet"/>
		<link rel="alternate" type="text/html" href="http://haypo.alwaysdata.net:443/wiki/index.php?title=Conseils_de_programmation_orient%C3%83%C2%A9e_objet&amp;action=history"/>
		<updated>2026-04-30T20:22:09Z</updated>
		<subtitle>Historique pour cette page sur le wiki</subtitle>
		<generator>MediaWiki 1.10.1</generator>

	<entry>
		<id>http://haypo.alwaysdata.net:443/wiki/index.php?title=Conseils_de_programmation_orient%C3%83%C2%A9e_objet&amp;diff=3719&amp;oldid=prev</id>
		<title>Haypo le 6 septembre 2005 à 00:52</title>
		<link rel="alternate" type="text/html" href="http://haypo.alwaysdata.net:443/wiki/index.php?title=Conseils_de_programmation_orient%C3%83%C2%A9e_objet&amp;diff=3719&amp;oldid=prev"/>
				<updated>2005-09-06T00:52:03Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[CatÃ©gorie:Programmation]]&lt;br /&gt;
&lt;br /&gt;
[[Programmation|Retour Ã  la page programmation]]&lt;br /&gt;
&lt;br /&gt;
J'ai programmÃ© en C++, puis [[Python]] et un peu de [[Java]], pendant un bout de temps. On m'a souvent demandÃ© des conseils de programmation. Je me propose donc de les exposer ici.&lt;br /&gt;
&lt;br /&gt;
== Usage du mot-clÃ© const ==&lt;br /&gt;
&lt;br /&gt;
=== UtilitÃ© du mot-clÃ© const ===&lt;br /&gt;
&lt;br /&gt;
Le mot-clÃ© const est utile pour deux choses. On indique que la fonction ne va modifier un paramÃ¨tre/une classe, et qu'on peut donc utiliser cette fonction '''sans effet de bord'''. Ensuite, le mot-clÃ© const aide le compilateur Ã  optimiser le code.&lt;br /&gt;
&lt;br /&gt;
Le mot-clÃ© '''const''' peut servir Ã  diffÃ©rents endroits. Exemples :&lt;br /&gt;
  (1) void affiche('''const''' Objet x);&lt;br /&gt;
  (2) int Annuaire::litTaille() '''const''';&lt;br /&gt;
  (3) string Annuaire::litPrenom('''const''' string nom) '''const''';&lt;br /&gt;
&lt;br /&gt;
Dans le premier cas (1), on indique que l'argument d'une fonction est constant, qu'on ne va pas modifier cet argument dans la fonction.&lt;br /&gt;
&lt;br /&gt;
Dans le second cas (2), on indique que la mÃ©thode ne va pas toucher au contenu de la classe. C'est utile pour une mÃ©thode d'accÃ¨s en lecture Ã  une classe, ou une mÃ©thode qui ne fait qu'afficher un rÃ©sultat.&lt;br /&gt;
&lt;br /&gt;
Enfin, dans le troisiÃ¨me cas (3), on cumule les deux propriÃ©tÃ©s.&lt;br /&gt;
&lt;br /&gt;
=== Les dÃ©savantages du mot-clÃ© const ===&lt;br /&gt;
&lt;br /&gt;
Le soucis est que le mot-clÃ© const est &amp;quot;contagieux&amp;quot;. Lorsqu'on passe un objet en argument en indiquant qu'il est constant, seules ses mÃ©thodes constantes sont autorisÃ©es !&lt;br /&gt;
  class Personne { &lt;br /&gt;
    ... &lt;br /&gt;
    string litNom(); &lt;br /&gt;
    string litPrenom(); &lt;br /&gt;
    void affiche() '''const''';&lt;br /&gt;
  };&lt;br /&gt;
  void Personne::affiche() const&lt;br /&gt;
  {&lt;br /&gt;
     std::cout &amp;lt;&amp;lt; litNom() &amp;lt;&amp;lt; &amp;quot; &amp;quot; &amp;lt;&amp;lt; litPrenom() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Il donc modifier la classe de cette maniÃ¨re :&lt;br /&gt;
  class Personne {&lt;br /&gt;
    ... &lt;br /&gt;
    string litNom() '''const''';&lt;br /&gt;
    string litPrenom() '''const''';&lt;br /&gt;
    void affiche() '''const''';&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
== Utiliser les rÃ©fÃ©rences (C++) ==&lt;br /&gt;
&lt;br /&gt;
=== Passer un variable en paramÃ¨tre par rÃ©fÃ©rence ===&lt;br /&gt;
&lt;br /&gt;
Le langage C++ permet de gÃªrer plus simplement les pointeurs que le langage C, grÃ¢ce Ã  l'utilisation des rÃ©fÃ©rences. Exemple :&lt;br /&gt;
  void calculeSomme_C (int a, int b, int *c) { *c = a + b; }&lt;br /&gt;
  void calculeSomme_CPP (int a, int b, int &amp;amp;c) { c = a + b; }&lt;br /&gt;
&lt;br /&gt;
Il est Ã©galement vivement conseillÃ© de passer les (gros) objets par rÃ©fÃ©rence, pour Ã©viter qu'ils soient copier. Imaginer un tableau de 1000 Ã©lÃ©ments de 10 Ko chaqun. Si on passe l'objet en argument par copier, il faudra copier 10 Mo Ã  chaque fois ! C'est trÃ¨s embÃªtant. Il suffit d'ajouter un &amp;quot;&amp;amp;&amp;quot; et c'est jouÃ© !&lt;br /&gt;
  double calculeMoyenne (ListeNote liste);&lt;br /&gt;
devient&lt;br /&gt;
  double calculeMoyenne (const ListeNote &amp;amp;liste);&lt;br /&gt;
&lt;br /&gt;
=== RÃ©fÃ©rence utilisÃ©e comme abrÃ©viation ===&lt;br /&gt;
&lt;br /&gt;
La version C++ est beaucoup plus lisible car on se passe de l'Ã©toile prÃ©cÃ©dent le paramÃ¨tre c. Mais, les rÃ©fÃ©rences peuvent Ã©galement servir Ã  abrÃ©ger un bout de code :&lt;br /&gt;
  void affichePersonne (const string nom)&lt;br /&gt;
  {&lt;br /&gt;
     std::cout &amp;lt;&amp;lt; annuaire.cherchePersonne(nom).nom_complet&lt;br /&gt;
               &amp;lt;&amp;lt; &amp;quot; : &amp;quot;&lt;br /&gt;
               &amp;lt;&amp;lt; annuaire.cherchePersonne(nom).telephone&lt;br /&gt;
               &amp;lt;&amp;lt; &amp;quot; : &amp;quot;&lt;br /&gt;
               &amp;lt;&amp;lt; annuaire.cherchePersonne(nom).email&lt;br /&gt;
               &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
  }&lt;br /&gt;
devient&lt;br /&gt;
  void affichePersonne (const string nom)&lt;br /&gt;
  {&lt;br /&gt;
     Personne &amp;amp;p = annuaire.cherchePersonne(nom);&lt;br /&gt;
     std::cout &amp;lt;&amp;lt; p.nom_complet&lt;br /&gt;
               &amp;lt;&amp;lt; &amp;quot; : &amp;quot;&lt;br /&gt;
               &amp;lt;&amp;lt; p.telephone&lt;br /&gt;
               &amp;lt;&amp;lt; &amp;quot; : &amp;quot;&lt;br /&gt;
               &amp;lt;&amp;lt; p.email&lt;br /&gt;
               &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
La diffÃ©rence par rapport Ã  &amp;quot;Personne p = annuaire.cherchePersonne(nom);&amp;quot; est qu'on Ã©vite une copie. Imaginez qu'on connaisse le nom, prÃ©nom, email, tÃ©lÃ©phone, â€¦ d'une personne : et bien, il faudrait copier chaque information, ce qui est tout Ã  fait inutile.&lt;/div&gt;</summary>
		<author><name>Haypo</name></author>	</entry>

	</feed>