IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langages de programmation Discussion :

Comment pourriez-vous expliquer l'orienté objet?


Sujet :

Langages de programmation

  1. #101
    Membre régulier
    Homme Profil pro
    Autre
    Inscrit en
    Juin 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juin 2015
    Messages : 18
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par Kevin-lourenco Voir le message
    Je ne suis moi-même pas convaincu de l'efficacité apparente de ta méthode par rapport à la mienne. Je l'utiliserais surement dans un prochain nouveau projet pour ne pas mourir idiot mais surement pas dans un projet existant, ce serait une perte de temps.
    En toute indiscrétion, où as-tu appris le dev web? et quand?

  2. #102
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 77
    Points : 43
    Points
    43
    Par défaut
    J'ai appris de multiple façons différentes, formation, site internet, cursus scolaire, livres, expérience en entreprise.

    J'ai commencé il y à 4 ans, j'en est aujourd'hui 21.

    Ce n'est pas indiscret à partir du moment où tu demandes par curiosité et non pour m'attaquer sur ce que tu jugerais une faiblesse

  3. #103
    Membre expert
    Avatar de Chauve souris
    Homme Profil pro
    amateur (éclairé ?)
    Inscrit en
    Novembre 2005
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Paraguay

    Informations professionnelles :
    Activité : amateur (éclairé ?)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 186
    Points : 3 086
    Points
    3 086
    Par défaut Petit exemple vécu
    Après avoir fait souffrir mes élèves dans la programmation purédure en C traditionnel, en particulier dans les manipulations des chaînes de caractères ce qui est un vrai supplice algorithmique, je leur ai montré comment on pouvait construire un objet "Chaine" (je l'ai appelé comme ça puisqu'il y a le tout-mâché String), avec les constructeurs, les destructeurs, l'opérateur '+' pour l'accrochage des wagons, etc. Plus d'autres petits exemples de ce niveau. L'intérêt pour eux fut évident, d'autant que je leur ai montré qu'ils pouvaient alors faire leurs classes comme ils le voulaient avec beaucoup moins de contraintes qu'en C traditionnel.
    "Toute l'histoire de l'informatique n'a été que l'histoire des systèmes d'exploitations" (Le Manifeste du PC)

  4. #104
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    Pourquoi, pourquoi, pourquoi…

    1) pourquoi S.Jobs connait la POO ?
    La programmation orienté objet à été « élaborée » par Ole-Johan Dahl et Kristen Nygaard au début des années 60 puis « aboutie » par Alan Kay au Xerox PARC.

    La suite beaucoup la connaissent : Steve jobs en visite au PARC découvre les travaux d’ Alan Kay qu’il finira enbaucher chez Apple. Entre temps Apple fabirque une premiere machine Smalltalk (le Lisa), puis par la suite les Macintosh, qui sont devenus par la suite une source d’inspiration du Système Windows et le ras de marée culturel qu’est devenu la micro informatique…

    Donc voila pourquoi Steve Jobs à bien pigé ce qu’était la POO, et surtout la "vendre".


    2) pourquoi la presse interroge S.Jobs sur la POO ?
    L’interview date de 1994, pour marquer l’anniversaire des 10ans du premier Macintosh ; c’est un peu logique d’interviewer S.Jobs. et si le sujet dévie sur la programmation objet c’est parce qu’elle à fait partie de l’ADN du Mac.


    3) pourquoi on reparle « encore » de S.Jobs aujourd’hui ?
    Je comprends que cela puisse en agacer plus d’un, mais c’est comme ça. S.Jobs à tout fait pour devenir une icône mondiale, on risque d’en parler encore longtemps.

    C’est d’ailleurs ce pourquoi aussi sort un film sur sa vie en ce moment, et qui "justifie" que Rolling Stone ressorte cette veille interview aujourd’hui, histoire d’être dans le buzz de l’audimat…

    Mais ce film semble faire un flop ; j’imagine que c’est une consolation pour certains.


    Quand aux diverses explications sur la nature de la POO, je vois que cela reste toujours obscur pour beaucoup...
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  5. #105
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 77
    Points : 43
    Points
    43
    Par défaut
    Rappelons que je suis en PHP.

    Il y a sûrement beaucoup plus de contraintes à rester en procédural au niveau d'un language compilé que d'un language interprété.

    Quand je code en Java (language compilé) je programme, comme vous, en orienté objet.

  6. #106
    Membre régulier
    Homme Profil pro
    Autre
    Inscrit en
    Juin 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juin 2015
    Messages : 18
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par Kevin-lourenco Voir le message
    J'ai appris de multiple façons différentes, formation, site internet, cursus scolaire, livres, expérience en entreprise.

    J'ai commencé il y à 4 ans, j'en est aujourd'hui 21.

    Ce n'est pas indiscret à partir du moment où tu demandes par curiosité et non pour m'attaquer sur ce que tu jugerais une faiblesse
    Je ne me le permettrais pas

    Cependant, ton comportement me fait penser à un citation de Abraham Maslow : "Si le seul outil que vous avez est un marteau, vous verrez tout problème comme un clou."
    A mon avis tu maitrises uniquement la programmation procédurale en PHP et toutes les solutions qui te semblent les meilleurs sont dans ce qu'on appelle ta zone de confort.

    Tu es encore un débutant, quand tout un forum d'initiés "s'acharne" sur toi pour te montrer et démontrer que tu as tort (de façon pédagogique ou non, je salue d'ailleurs la patience d'Ipnose pour son exemple particulièrement démonstratif), tu devrais prendre du recul et essayer de comprendre leurs propos

    Je ne peux que te conseiller de découvrir le monde de l'Orienté Objet, il résous au final beaucoup plus de problème qu'il n'en crée

  7. #107
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 77
    Points : 43
    Points
    43
    Par défaut
    A aucun moment je n ai dis que ma solution était mieux bien au contraire ! J'ai un résonnement logique.

    Si j'ai un marteau, et qu on me propose un nouvelle outil je veux pouvoir directement visualiser que l'outil améliorera considérablement ma productivité.

    Si l'outil est aussi simple qu'un marteau plus solide avec un meilleur manche, je n'aurais aucun mal à me dire "en effet c'est mieux"

    Mais là on me propose de construire une machine complètement différente pour faire la même finalité. Mais le fait elle mieux plus et vite ?

    Si c'est le cas alors oui, je construisais ce nouvelle outil.

    Mais si le gain est trop maigre par rapport à l effort de construction, alors ce n'est pas la peine.

    D'où ma remarque, je verrais quand je créerait un nouveau projet, l actuel étant déjà trop avancé pour faire ce changement.

  8. #108
    Expert confirmé Avatar de AoCannaille
    Inscrit en
    Juin 2009
    Messages
    1 413
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 1 413
    Points : 4 734
    Points
    4 734
    Par défaut
    Citation Envoyé par Kevin-lourenco Voir le message
    A aucun moment je n ai dis que ma solution était mieux bien au contraire ! J'ai un résonnement logique.

    Si j'ai un marteau, et qu on me propose un nouvelle outil je veux pouvoir directement visualiser que l'outil améliorera considérablement ma productivité.

    Si l'outil est aussi simple qu'un marteau plus solide avec un meilleur manche, je n'aurais aucun mal à me dire "en effet c'est mieux"

    Mais là on me propose de construire une machine complètement différente pour faire la même finalité. Mais le fait elle mieux plus et vite ?

    Si c'est le cas alors oui, je construisais ce nouvelle outil.

    Mais si le gain est trop maigre par rapport à l effort de construction, alors ce n'est pas la peine.

    D'où ma remarque, je verrais quand je créerait un nouveau projet, l actuel étant déjà trop avancé pour faire ce changement.
    Je te souhaite de commencer un nouveau projet bientôt alors. les exemples précédents n'ont pas l'air de te convaincre de l'avantage énorme de modularité de l'Orienté Objet...
    Peut être n'as-tu jamais eu a faire de maintenance sur un projet ou des évolutions hors conception originale?

  9. #109
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 77
    Points : 43
    Points
    43
    Par défaut
    Le projet actuel est un site e-commerce mis en ligne et amélioré quotidiennement, j'espère que cela réponds à ta question

  10. #110
    Nouveau membre du Club
    Homme Profil pro
    developpeur et admin systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : developpeur et admin systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 19
    Points : 38
    Points
    38
    Par défaut
    Je trouve que la définition de Steve Jobs va très bien aussi à la programmation procédurale.

  11. #111
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 77
    Points : 43
    Points
    43
    Par défaut
    "Je trouve que la définition de Steve Jobs va très bien aussi à la programmation procédurale."

    Donc je ne suis pas le seul à penser cela.

    Vu que apparaement personne n'arrive à avoir une définition plus claire et ciblé de ce que permet vraiment l'objet, je m'en vais apprendre la POO pour me forger ma propre opinion.

  12. #112
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    @ Kevin-lourenco
    mesage 25 => Merci ! Mais bon tout cas on peut le faire avec des variables passées en référence ?
    mesage 43 => Donc en soit je n ai pas totalement tord quand je dis q'une fonction est en soit une conception objet
    ...
    La, par rapport à la logique de la POO : t'es completement à l'envers:

    la logique de la POO veut que les objets aient leurs actions propres.
    Donc dans ton cas, passer une variable en référence (par pointeur sur la variable) [dans une fonction] c'est du procédural.

    en Objet ta "variable en référence" devrait être un objet qui possede en lui même la (ou les) fonctions qu'il doit réaliser.

    Mais pour être plus précis encore, un objet est en lui même une abstraction, il n'existe réellement que lorsqu'il est instancié (avec ses valeurs).

    Pour prendre un exemple classique en programmation (et en restant dans l'univers des débuts de SmallTalk)

    Un des Objet les plus simple à apréhender pour un dev : une fenetre.

    Une fenetre c'est un objet présent sur l'IHM, elle est composée d'une barre de titre, d'une case de fermeture, de redimensionnement; Il y une partie libre pour le contenu, etc...

    Pour le developpeur la création d'une fenetre dans l'IHM se fait par une simple instanciation, il ecrit un code dans le genre

    MaFenetre1 = new Fenetre(liste des particularismes voulus pour cette première fenêtre);
    MaFenetre2 = new Fenetre(liste des particularismes voulus pour cette seconde fenêtre);
    MaFenetre3 = new Fenetre(liste des particularismes voulus pour cette troisième fenêtre);

    Puis par la suite y lui demander de réaliser ses propres "fonctions" (on parle de méthodes) comme par exemple

    MaFenetre1.changCouleurFond(Orange);

    MaFenetre3.positionneToi(enHautaGauche);
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  13. #113
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    Citation Envoyé par YAKYETI Voir le message
    Bonjour,
    Si quelqu'un pouvait m'expliquer le splendide échec des SGBDOO (O2, avec lequel j'ai tenté de travailler, Objectstore ...) ?
    Le silence à ce propos est révélateur ...
    Cordialement,François
    Performances médiocres et surconsommation en flèche.

    Et reconnaissons le, avoir des milliards d'instances d'objets dans tout les coins, c'est pas gérable.

    Depuis on à inventé les bases noSQL et le Big data, c'est beaucoup plus simple et efficace.
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  14. #114
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 77
    Points : 43
    Points
    43
    Par défaut
    J aime beaucoup ta phrase j ai l impression d y voir plus claire:

    "en Objet ta "variable en référence" devrait être un objet qui possede en lui même la (ou les) fonctions qu'il doit réaliser."

    Mais au fond que ce soit la fenêtre qui est "autonome" ou que ce soit une fonction principale qui contrôle la fenêtre, cela change beaucoup de chose ?

  15. #115
    Nouveau membre du Club
    Homme Profil pro
    developpeur et admin systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : developpeur et admin systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 19
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par Kevin-lourenco Voir le message
    "Je trouve que la définition de Steve Jobs va très bien aussi à la programmation procédurale."

    Donc je ne suis pas le seul à penser cela.

    Vu que apparaement personne n'arrive à avoir une définition plus claire et ciblé de ce que permet vraiment l'objet, je m'en vais apprendre la POO pour me forger ma propre opinion.

    Je m'explique un peu plus, dans les langages comme Pascal ou une procédure ou fonction peut englober tout un petit monde de procédures et fonctions imbriquées, une telle procédure peut très bien avoir un énorme savoir faire.

    Pour les langages qui n'acceptent pas l'imbrication, les librairies peuvent suppléer.

  16. #116
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    Citation Envoyé par Kevin-lourenco Voir le message
    Mais au fond que ce soit la fenêtre qui est "autonome" ou que ce soit une fonction principale qui contrôle la fenêtre, cela change beaucoup de chose ?
    Ben ça change tout, et à plein de niveaux

    _par exemple en mémoire :
    chaque objet "fenêtre" à ses propres contenus (ou variables) ce qui évite d'avoir de gérer autant de variables pour chaque fenetre comme par exemple dans un tableau, alors que si une fenetre deviens inutile, toutes la place occupée en mémoire est récupérée

    _par exemple en validation du code:
    Comme chaque objet à ses propres méthodes (fonctions qui lui sont propres) impossible de lui appliquer par erreur d'écriture une fonction qu'il ne peut pas faire

    _la compréhension du code, avec les valeurs contextuelles et encapsulées pour chaque objet,

    il y a aussi l'héritage: créer un nouvel objet à partir d'un premier objet, mais en lui ajoutant des méthodes, variables, etc...

    Ce qui permet par la suite de gérer par polymorphisme, et même pour certains langages faire de la surcharge d'opérateurs, autant de choses qui permettent d'avoir un code plus concis et plus clair....

    En POO on maitrise plus facilement les programmations gigantesques, on peut plus facilement assigner le travail par équipe par tranches d'objets,

    Dans le dev on commence généralement à créer le code par le "haut" cad les grandes fonctionnalités, quitte à faire des objets avec un embryon de code, pour bien maitriser la vue d'ensemble, pour ensuite pouvoir affiner les détails des objets de bas niveaux...

    Les tests unitaire ont commencés avec les objets, et sont bien plus simple à mettre en œuvre en POO qu'en procédural, surtout quand on remonte dans la complexité et les imbrications d'objets, ce qui devient vite un enfer en procédural,

    La POO est aussi tres pratique quand on veut récupérer des objets pour un projet différent, ce qui permet de gagner pas mal de temps et surtout de fiabilité, alors qu'en procédural ça devient vite un cauchemars, pour peu qu'on oublie une petite variable peu utilisée dans un coin...

    Il existe même des boites spécialisées qui proposent des objets tout faits..

    alors non, si la POO à été "inventée" ce n'est pas uniquement pour un simple exercice intellectuel, mais bien parce qu'il a la une réelle utilité et un besoin vital.

    Même le langage ADA , qui à la base était censé être un aboutissement sur" l'art de programmer" à du être remanier pour devenir un langage Objet...
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  17. #117
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 77
    Points : 43
    Points
    43
    Par défaut
    Merci à vous deux d avoir pris le temps et avoir su m'éclairer sur la POO, cette fois j'ai plus facilement pu faire le lien entre les bénéfices apportés et les fois où j'ai rencontré des problèmes en procédural

    C est sur que de cette manière, cela vaut vraiment le coup de "sortir de ma zone de confort", pour à peu près tous les points mentionnées précédemment, en particulier la question de mémoire, la réutilisation d'objet et la simplification des tests unitaires

  18. #118
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 240
    Points : 636
    Points
    636
    Par défaut
    Citation Envoyé par I_Pnose Voir le message
    Maintenant la vraie question à 100 000 euros : peux-tu faire aussi modulable et structuré que ça avec une approche procédurale ?

    (Désolé pour le code, ce n’est pas du PHP –pas ma tasse de thé– mais j’ose espérer que le code est lisible).
    C'est 100 000 euros facilement gagné en fait...

    Le fait qu'un code soit modulable ou structuré n'est pas une question d'objet. La pertinence quant au choix du paradigme dépend de l'approche choisie pour la résolution un problème. Par exemple l'objet n'est pas spécialement adapté pour le traitement de flux de donné ou la construction d'un jeu de donné mais est très pertinent pour gérer des structures de données persistantes stockées en mémoire vivant indépendamment. L’inconvénient avec la mode objet vient surtout de la confusion entre le paradigme lui même et critères transversaux sont la modularité, la structure, etc.
    Il est en fait relativement aisé de faire plus modulaire que votre exemple dans la mesure ou vous avez choisit de créer une dépendance entre un véhicule et son réservoir, voir entre le réservoir et la méthode de remplissage...

    Exemple ...

    On commence par définir les structures de données de base.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    $vehicule = array(
    	'places' => array(
    		'occupee' => 0,
    		'max' => 0
    	),
    	'reservoir' => (
    		'niveau' => 0,
    		'capacite' => 0
    	)
    	'action' => array(
    		'avancer' => funciton(),
    		'freiner' => function()
    	)
    ) ;
    
    
    $station = array(
    	'carburant' => ''
    	'reserve' => 0
    	'remplir' => NULL
    ) ;
    On crée des fonctions d'initialisation qui joueront un rôle équivalent au constructeur et au système d'héritage...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    function nouvelle_voiture($vehicule)
    {
    	$voiture = $vehicule ;
    	$voiture['nombre_porte'] = 4 ;
    	$voiture['nombre_place'] = 4 ;
    	$voiture['reservoir']['capacite'] = 50 ;
    	return $voiture ;
    }
    
    function nouvelle_moto($vehicule)
    {
    	$moto = $vehicule ;
    	$moto['nombre_porte'] = 0 ;
    	$moto['nombre_place'] = 2 ;
    	$moto['reservoir']['capacite'] = 30 ;
    	return $moto ;
    }
    
    function nouvelle_monospace($vehicule)
    {
    	$mspace = $vehicule ;
    	$mspace['nombre_porte'] = 4 ;
    	$mspace['nombre_place'] = 8 ;
    	$mspace['reservoir']['capacite'] = 80 ;
    	return $mspace ;
    }
    
    function nouvelle_station_service($station)
    {
    	$station['carburant'] = 'sans plomb' ;
    	$station['reserve'] = 1000 ;
    	$station['remplir'] = function(){} 
    }
    On se retrouve grosso merdo avec la modularité proche de cette de votre exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $instances = array();
    $instances['voiture1'] = nouvelle_voiture($vehicule);
    $instances['voiture2'] = nouvelle_voiture($vehicule);
    $instances['moto1'] = nouvelle_moto($vehicule);
    $instances['moto2'] = nouvelle_moto($vehicule);
    $instances['monospace'] = nouvelle_monospace($vehicule);
    
    $bernard_store = nouvelle_station_service($station);
    
    foreach ($instances as $name=>$instance)
    {
    	$instance.avancer();
    	if($name=='monospace' && $instance['reservoir']['niveau']<10) $bernard_store['remplir']($instance);
    	etc...
    }
    Comme a la différence de votre exemple je n'ai pas lié la méthode de remplissage à la station de service et au réservoir, je peux créer une autre station de service et la bidouiller technique pour faire le plein à chaud...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    function methode_de_remplissage_alternative(&$station, &$reservoir)
    {
    	do
    	{
    		$station[reserve]– ;
    		$reservoir[niveau]++ ;
    	}while(($reservoir[niveau]<$reservoir[capacite]-10) && $station[reserve]>0)
    }
    
    $robert_service = nouvelle_station_service($station);
    $robert_service["remplir"] = 'methode_de_remplissage_alternative';
    
    while($instances as $name=>$instance)
    {
    	...
    	if($name=='monospace' && $instance['reservoir']['niveau']<10) $bernard_store['remplir']($instance);
    	if($name=='voiture1' && $instance['reservoir']['niveau']<10) $robert_service['remplir']($instance);
    }
    L'utilisation de closures ou de callback permet de gagner en souplesse et en modularité. Ce sont des techniques transversales utilisables aussi bien en POO que dans d'autres paradigme. En fait la POO impose une structure qui certes est plus facile a comprendre pour un autre développeur familiarisé avec la POO mais qui oblige a passer par des design pattern complexe pour faire ce que l'on fait naturellement avec du procédural/impératif. Par exemple l'encapsulation de fonctionnalité nuit à la modularité et oblige a passer par des accesseurs pour contourner le problème. On peut faire du très modulaire avec du procédural/impératif le risque est de faire du trop modulaire ou de structurer le code de façon exotique, ce qui au final peut nuire à la lisibilité. L'avantage de la POO est avant tout normative.

  19. #119
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Citation Envoyé par psykokarl Voir le message
    L'utilisation de closures ou de callback permet de gagner en souplesse et en modularité. Ce sont des techniques transversales utilisables aussi bien en POO que dans d'autres paradigme. En fait la POO impose une structure qui certes est plus facile a comprendre pour un autre développeur familiarisé avec la POO mais qui oblige a passer par des design pattern complexe pour faire ce que l'on fait naturellement avec du procédural/impératif. Par exemple l'encapsulation de fonctionnalité nuit à la modularité et oblige a passer par des accesseurs pour contourner le problème. On peut faire du très modulaire avec du procédural/impératif le risque est de faire du trop modulaire ou de structurer le code de façon exotique, ce qui au final peut nuire à la lisibilité. L'avantage de la POO est avant tout normative.
    Je pense que tu sur-estimes le problème lié à l'encapsulation qui limiterait la modularité : on y est parfois confronté mais ça reste assez anecdotique. En revanche le fait de devoir passer par des closures pour masquer des informations, s'il s'agit bien d'encapsuler, me semble être autrement plus une source de complexité inutile.

    A ce sujet l'encapsulation ne consiste pour moi qu'à empêcher le programmeur de faire des erreurs par inadvertance et lui communiquer clairement ce qu'il peut manipuler et comment. Il ne s'agit pas de dresser des fils de fer barbelés autour du code. Une approche consistant à simplement préfixer les membres privés d'un underscore est pour moi suffisante, même si moins commode à l'usage que les syntaxes dédiées à la visibilité.

  20. #120
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2007
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 677
    Points : 2 137
    Points
    2 137
    Par défaut
    Citation Envoyé par psykokarl Voir le message
    Par exemple l'encapsulation de fonctionnalité nuit à la modularité et oblige a passer par des accesseurs pour contourner le problème. On peut faire du très modulaire avec du procédural/impératif le risque est de faire du trop modulaire ou de structurer le code de façon exotique, ce qui au final peut nuire à la lisibilité. L'avantage de la POO est avant tout normative.
    A mes yeux les bénéfices de l’encapsulation sont bien plus nombreux que les nuisances. De plus, c’est un peu comme avec les Legos, si tu ressens le besoin de scier des briques pour que ta création ressemble à quelque chose, même si c’est tentant ça signifie surtout qu’il y a un souci d’analyse quelque part.

    Ici, si j’encapsule les variables Capacite ou Quantite de mon réservoir afin d’éviter que celles-ci ne soient manipulables en dehors de la classe, ce n’est pas par sadisme mais plutôt pour éviter les potentiels effets de bords ; si je passe par une méthode publique pour remplir un réservoir, il y a fort à parier que ladite méthode fasse plus qu’une simple affectation de valeur, il y aura probablement une partie validation de données avant affectation, un prétraitement essentiel pour la fiabilité de l’application.

    De même si je n’expose qu’une méthode sur la dizaine que renferme une classe, ce n’est pas pour castrer le développeur mais plus pour l’aiguiller. Si je lui avais laissé l’accès à tous les membres de la classe, le risque serait qu’il oublie de vider telle liste avant d’utiliser telle méthode, de déclencher tel évènement avant d’effectuer tel traitement...

    L’encapsulation ne doit pas être vue comme un carcan mais, justement, comme un moyen d’organiser/structurer son code pour être manipulable en toute sécurité (surtout lorsqu’on bosse en équipe, chacun sur un pan métier différent par exemple).

    On peut faire du structuré en procédural (encore heureux), mais pas autant qu’en OO de mon point de vue (du moins pas comme je l’entends ; structuré == organisé && sécurisé).
    Le WIP de The last bastion, mon projet de jeu-vidéo (un TD en 3D)

    Mon portfolio / Ma page fb

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/05/2013, 21h56
  2. Réponses: 8
    Dernier message: 21/02/2012, 18h21
  3. Programmation orientée objet ? Comment ?
    Par ..::snake::.. dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 27/05/2007, 21h05
  4. [C#] Comment correctement programmer orienté objet ?
    Par ChristopheOce dans le forum C#
    Réponses: 5
    Dernier message: 06/02/2006, 13h22
  5. [DEBUTANT] Conseil sur la programmation orienté objet
    Par etiennegaloup dans le forum Langage
    Réponses: 7
    Dernier message: 27/05/2005, 12h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo