OVH Cloud OVH Cloud

Quel tutoriel pour débuter ?

202 réponses
Avatar
Migrec
Bonjour,

Je cherche un tutoriel imprimable sur le web pour apprendre le C avant
d'acheter un bouquin "de référence".
Je suis débutant en programmation mais je connais les scripts shell
(linux), le HTML ou encore un peu de PHP.

Quel tutoriel imprimable me conseillez-vous pour débuter ? Les 560 pages
de celui du site du zéro
(http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c.html)
découragent un peu mon imprimante, même avec le recto-verso
automatique... Mais le style me plaît ! Existe-t-il quelque chose dans
le même esprit mais en plus condensé ?

--
Migrec

10 réponses

Avatar
Thierry B.
--{ Wykaaa a plopé ceci: }--

Des tonnes de littérature existent sur le sujet et, sans polémiquer, le
fort typage a un intérêt certain pour construire des logiciels de
qualité (meilleure fiabilité, programmation sûre (au sens anglo-saxon du
terme : safe programming), coût moindre des phases de tests, etc.)



En voulant polémiquer (en Aout, c'est vendredi tous les jours, non ?)
le problème du typage fort, c'est que parfois on n'a pas le type
exact que l'on souhaite (les décimaux pour faire de la compta en C)
ou un typage trop strict (en Ada, tu vas au marché, tu achètes deux
pommes et trois poires; revenu à la maison, il n'est pas possible
de savoir combien de fruits tu as acheté :). Voilà...

Type même de l'article qui engendre la confusion sur les langages objet.
Tout est mélangé. Cet article est vraiment du grand n'importe quoi et me
conforte dans l'idée que Wikipedia est tout sauf une référence sérieuse
concernant le logiciel...



foo = mantra("La vérité est dans Wikipédia");

Hop, je retourne à mes coredumps. Bon appétit à tous.

--
Les hackers sont nos amis. Des amis bizarres aux goûts et aux horaires
curieux, mais qui ne feraient pas de mal à une mouche, même pas pour
savoir comment ça marche dedans ; pourquoi découper un insecte quand
on peut poser la question sur Slashdot ?.
Avatar
Francois
Wykaaa a écrit :

1) Cite-moi de tels langages.
2) Que veut dire "pleinement objet" ?
3) Qu'est-ce, pour toi, que le paradigme objet ?

4) Remarque : des langages "qui fonctionnent" est une phrase qui ne veut
rien dire.



Je vous vois parler de l'orienté objet et du coup j'aurais des petites
questions de béotien (pardon de m'immiscer).

Je découvre l'OO à travers un langage (comme tout le monde je suppose au
début) et j'aurais voulu savoir si le "Modèle objet" était quelque chose
de défini précisément où si c'était un peu le flou. J'essaye de
m'expliquer un peu.

J'ai l'impression qu'un langage OO, cherche à implémenter ce que
j'appelle le "modèle objet" (je suis incapable de vous en donner une
définition) et que en gros on a : d'un côté des concepts qui relèvent du
modèle objet et de l'autre des choses qui relèvent plus des rouages
internes du langage. La distinction entre les deux n'est pas toujours
simple.

J'imagine que pour avoir une idée plus précise de ce qu'est le modèle
objet, il est bien pratique de connaître plusieurs langage OO. Comme ça,
là distinction entre ce qui relève des particularités du langage et ce
qui relève du modèle objet se fait plus facilement.

Mais je me disais peut-être que le modèle objet était un paradigme qui
n'a jamais été précisément formalisé. Quand je vois quelques discussions
et les points de désaccord assez fréquents, j'ai un peu (à tort ou à
raison) cette impression.

Voici mes questions :

1) L'OO (ou le "Modèle objet") est-ce un modèle qui a été un jour
rigoureusement formalisé ? Peut-être qu'il existe plusieurs modèles
objets d'ailleurs ?

2) Connaissez vous des références qui expliquent le plus précisément
possible ce qu'est l'OO en tant que modèle, au delà de particularités de
tel ou tel langage ? Ou à l'inverse, connaissez vous des références qui,
à travers des exemples dans différents langages, dégagent précisément le
modèle objet sous-jacent et commun à tous ces langages ? (n'importe
quelles références m'intéressent avec comme critères bonus : en français
et pas trop abscons)


Merci d'avance.

--
François
Avatar
Wykaaa
Francois a écrit :
Wykaaa a écrit :

1) Cite-moi de tels langages.
2) Que veut dire "pleinement objet" ?
3) Qu'est-ce, pour toi, que le paradigme objet ?

4) Remarque : des langages "qui fonctionnent" est une phrase qui ne
veut rien dire.



Je vous vois parler de l'orienté objet et du coup j'aurais des petites
questions de béotien (pardon de m'immiscer).



Il n'y a pas mat!ère à s'excuser, Usenet est fait pour échanger,
s'entraider, et apprendre.

Je découvre l'OO à travers un langage (comme tout le monde je suppose au
début) et j'aurais voulu savoir si le "Modèle objet" était quelque chose
de défini précisément où si c'était un peu le flou. J'essaye de
m'expliquer un peu.



A travers quel langage ?

J'ai l'impression qu'un langage OO, cherche à implémenter ce que
j'appelle le "modèle objet" (je suis incapable de vous en donner une
définition) et que en gros on a : d'un côté des concepts qui relèvent du
modèle objet et de l'autre des choses qui relèvent plus des rouages
internes du langage. La distinction entre les deux n'est pas toujours
simple.



La distinction entre les 2 est souvent très floue.

J'imagine que pour avoir une idée plus précise de ce qu'est le modèle
objet, il est bien pratique de connaître plusieurs langage OO. Comme ça,
là distinction entre ce qui relève des particularités du langage et ce
qui relève du modèle objet se fait plus facilement.



Le problème est que plus on connaît de langages à objets ou déclarés
comme tels et plus le modèle objet paraît flou car il y a une très
grande diversité dans les langages à objets (mais c'est pareil dans les
langages procéduraux classiques...)

Mais je me disais peut-être que le modèle objet était un paradigme qui
n'a jamais été précisément formalisé. Quand je vois quelques discussions
et les points de désaccord assez fréquents, j'ai un peu (à tort ou à
raison) cette impression.



Tu as tout à fait raison. Il n'existe pas de modèle objet formel. Il
existe un modèle d'UML (appelé métamodèle) et même un méta-métamodèle
(le MOF pour Meta Object Facilities) mais ils ne décrive que ce qu'UML
considère comme un modèle objet. Je ne t'encourage d'ailleurs pas à
consulter ces documents de l'OMG car ils sont incompréhensibles pour un
"béotien" comme tu te qualifies toi-même (je ne peux pas en juger et ce
n'est ni mon but ni mon rôle)

Voici mes questions :

1) L'OO (ou le "Modèle objet") est-ce un modèle qui a été un jour
rigoureusement formalisé ? Peut-être qu'il existe plusieurs modèles
objets d'ailleurs ?



La réponse est non dans l'absolu. Il n'existe que le métamodèle UML mais
c'est une vue partielle (et partiale) des choses.

Pour savoir s'il pourrait exister plusieurs modèles objets il faudrait
déjà définir ce qu'est un modèle objet.

On peut tout juste parler d'approche orientée objet, qu'on pourrait
résumer comme suit (je prends le point de vue de Grady Booch, développé
dans son livre "analyse et conception orientées objet", déjà ancien mais
qui me paraît, encore aujourd'hui, le plus clair sur le sujet).
Attention cependant, ce point de vue est quelques fois contesté par des
travaux plus récents (que, pour ma part, je considère comme des
querelles de clocher inutiles).

Donc, pour résumer, l'approche objet s'appuie sur 4 concepts majeurs de
base :
- le concept d'abstraction (se matérialise par la notion de classe dans
un langage de programmation objet)
- le concept d'encapsulation qui permet à un objet (une classe donc) de
ne montrer à l'extérieur que ce qui est nécessaire à son utilisation. Ce
concept est matérialisé dans les LOO (langages orientés objet) par les
directives de contrôle d'accès (private, protected, public)
- le concept de modularité (au sens objet) qui s'ppuie sur 2 principes :
- La forte cohésion : un objet ne traite que d'une seule
abstraction et il la traite entièrement
- Le faible couplage : minimisation des dépendances entre classes
et encapsulation
ATTENTION : cette notion de modularité est piégeuse car dans les
langages on a aussi la notion de package (regroupement de plusieurs
classes). Le faible couplage est souvent mis en oeuvre, dans les grosses
applications, au niveau des packages et non au niveau des classes car la
granularité est trop fine.
- Enfin le concept de hiérarchie. Il est mis en oeuvre, dans les LOO, à
travers l'héritage mais aussi à travers la composition/agrégation d'objets.

On peut donc dire, selon Grady Booch mais aussi Bertrand Meyer et pleins
d'autres que, pratiquer l'approche objet, c'est utiliser, ensemble, les
4 concepts majeurs précédents (il suffit que l'un manque pour que l'on
ne puisse pas dire qu'on pratique l'objet).

Je sais que nombreux sont ceux qui, aujourd'hui, conteste cette
définition du paradigme objet et je connais leur littérature et leurs
arguments (ce n'est donc pas la peine qu'ils répondent à ce message ou
qu'ils le contestent). Ils restent minoritaires dans le domaine
professionnel.

2) Connaissez vous des références qui expliquent le plus précisément
possible ce qu'est l'OO en tant que modèle, au delà de particularités de
tel ou tel langage ? Ou à l'inverse, connaissez vous des références qui,
à travers des exemples dans différents langages, dégagent précisément le
modèle objet sous-jacent et commun à tous ces langages ? (n'importe
quelles références m'intéressent avec comme critères bonus : en français
et pas trop abscons)



Ca c'est très difficile à satisfaire comme demande pour les raisons que
j'ai indiquées ci-dessus.

Pour moi, mais ceci peut-être contesté, en français, la "bible" reste le
livre de Bertrand Meyer "Conception et programmation orientée objet"
(attention, cet ouvrage fait 1200 pages !).
Du point de vue de la modélisation objet, seules les 160 première pages
sont utiles. Mais la suite est également fort intéressante car il y a,
en particulier, pleins d'exemples d'application des concepts dans
différents LOO.

Sur le Web, en français et pas abscon, il y a un cours UML pas mal fait
à : http://uml.free.fr/


Merci d'avance.



De rien
Avatar
Francois
Wykaaa a écrit :

Je découvre l'OO à travers un langage (comme tout le monde je suppose
au début) et j'aurais voulu savoir si le "Modèle objet" était quelque
chose de défini précisément où si c'était un peu le flou. J'essaye de
m'expliquer un peu.



A travers quel langage ?



Ah, je ne ne voulais pas le préciser car je ne voulais pas rentrer dans
des polémiques du style "le langage X st mieux que Y", mais puisque que
tu veux savoir, c'est à travers Python que je découvre l'OO (ça aurait
pu être un autre).



1) L'OO (ou le "Modèle objet") est-ce un modèle qui a été un jour
rigoureusement formalisé ? Peut-être qu'il existe plusieurs modèles
objets d'ailleurs ?



La réponse est non dans l'absolu. [couic]



Ok. Si j'ai bien compris n'existe pas un unique et universel modèle
objet en programmation, mais plusieurs. Celui décrit par le méta-langage
UML par exemple en est, mais il y a le modèle objet décrit par Booch qui
en est un autre. Et sans doute en existe-t-il d'autres. De plus,
j'imagine que ces modèles doivent avoir leur part d'ambiguïtés,
d'imprécisions comme souvent, non ?


- le concept d'encapsulation qui permet à un objet (une classe donc) de
ne montrer à l'extérieur que ce qui est nécessaire à son utilisation.



Heu, une classe et les objets produits avec cette classe c'est
différent, non ? c'est ton "... permet à un objet (une classe donc)..."
qui me perturbe.


Sur le Web, en français et pas abscon, il y a un cours UML pas mal fait
à : http://uml.free.fr/



Merci bien pour le lien.

Tiens, en tapant "Conception et programmation orientée objet" sur
google, je tombe sur ce cours : http://rainet.enic.fr/unit/A43/index.htm
Ça a l'air vachement bien. :-)

Merci pour ta longue réponse.


--
François
Avatar
Wykaaa
Francois a écrit :
Wykaaa a écrit :

Je découvre l'OO à travers un langage (comme tout le monde je suppose
au début) et j'aurais voulu savoir si le "Modèle objet" était quelque
chose de défini précisément où si c'était un peu le flou. J'essaye de
m'expliquer un peu.



A travers quel langage ?



Ah, je ne ne voulais pas le préciser car je ne voulais pas rentrer dans
des polémiques du style "le langage X st mieux que Y", mais puisque que
tu veux savoir, c'est à travers Python que je découvre l'OO (ça aurait
pu être un autre).



On n'est pas ici pour polémiquer sur les langages, donc... pas de
commentaire.



1) L'OO (ou le "Modèle objet") est-ce un modèle qui a été un jour
rigoureusement formalisé ? Peut-être qu'il existe plusieurs modèles
objets d'ailleurs ?



La réponse est non dans l'absolu. [couic]



Ok. Si j'ai bien compris n'existe pas un unique et universel modèle
objet en programmation, mais plusieurs. Celui décrit par le méta-langage
UML par exemple en est, mais il y a le modèle objet décrit par Booch qui
en est un autre. Et sans doute en existe-t-il d'autres. De plus,
j'imagine que ces modèles doivent avoir leur part d'ambiguïtés,
d'imprécisions comme souvent, non ?



Disons que le modèle de Booch (qui est une approche plutôt qu'un modèle)
est quand même, historiquement, à la base de UML.


- le concept d'encapsulation qui permet à un objet (une classe donc)
de ne montrer à l'extérieur que ce qui est nécessaire à son utilisation.



Heu, une classe et les objets produits avec cette classe c'est
différent, non ? c'est ton "... permet à un objet (une classe donc)..."
qui me perturbe.



Excuse-moi. Il faut préciser une chose à propos du mot objet.
Il n'a pas le même sens suivant que l'on parle de "conception objet" ou
de "programmation objet".
Quand on parle de conception objet, les objets dont on parle sont plutôt
les classes. Ce sont elles que l'on cherche à mettre en évidence via les
abstractions.
Quand on parle de programmation objet, objet a plutôt le sens d'instance
de classe car, en programmation, ce que l'on manipule sont plutôt des
variables, donc des instances de classes.
Des discussions s'ensuivent car dans certains langages,les classes
elles-mêmes sont des instances de classes (Smalltalk, par exemple). Ce
n'est pas le cas en C++, ni en Java, ce qui fait dire que ces 2 langages
ne sont pas de purs langages objet, ce qui est vrai, d'un point de vue
rigoureux.


Sur le Web, en français et pas abscon, il y a un cours UML pas mal
fait à : http://uml.free.fr/



Merci bien pour le lien.

Tiens, en tapant "Conception et programmation orientée objet" sur
google, je tombe sur ce cours : http://rainet.enic.fr/unit/A43/index.htm
Ça a l'air vachement bien. :-)



J'ai juste regardé 2 ou 3 transparents/vidéo, ça à l'air bien mais il
faudrait creuser pour voir s'il n'y a pas trop d'erreurs ou d'imprécisions.

Merci pour ta longue réponse.



De rien
Avatar
Francois
Wykaaa a écrit :

Heu, une classe et les objets produits avec cette classe c'est
différent, non ? c'est ton "... permet à un objet (une classe
donc)..." qui me perturbe.



Excuse-moi.



Pas de problème. :-)

Il faut préciser une chose à propos du mot objet.
Il n'a pas le même sens suivant que l'on parle de "conception objet" ou
de "programmation objet". [couic]



Ok, c'est très clair. Ah, entre le langage et les méta-langages, on s'y
perd. :-)



--
François
Avatar
Wykaaa
Thierry B. a écrit :
--{ Wykaaa a plopé ceci: }--

Des tonnes de littérature existent sur le sujet et, sans polémiquer, le
fort typage a un intérêt certain pour construire des logiciels de
qualité (meilleure fiabilité, programmation sûre (au sens anglo-saxon du
terme : safe programming), coût moindre des phases de tests, etc.)



En voulant polémiquer (en Aout, c'est vendredi tous les jours, non ?)
le problème du typage fort, c'est que parfois on n'a pas le type
exact que l'on souhaite (les décimaux pour faire de la compta en C)
ou un typage trop strict (en Ada, tu vas au marché, tu achètes deux
pommes et trois poires; revenu à la maison, il n'est pas possible
de savoir combien de fruits tu as acheté :). Voilà...



Ca se saurait si ADA avait été inventé pour faire son marché :-)
Plus sérieusement, il faut lire le cahier des charges Steelman (le
dernier), cf. http://www.adahome.com/History/Steelman/intro.htm et, en
particulier, l'exigence 3A :
3A. Strong Typing. The language shall be strongly typed. The type of
each variable, array and record component, expression, function, and
parameter shall be determinable during translation.


Type même de l'article qui engendre la confusion sur les langages objet.
Tout est mélangé. Cet article est vraiment du grand n'importe quoi et me
conforte dans l'idée que Wikipedia est tout sauf une référence sérieuse
concernant le logiciel...



foo = mantra("La vérité est dans Wikipédia");


La vérité est dans les documents officiels, pas dans les document de
nième main...

Hop, je retourne à mes coredumps. Bon appétit à tous.


Oooops, aurais-je raté le déjeuner ?
Avatar
espie
In article <48ba661b$0$930$,
Wykaaa wrote:
Marc Espie a écrit :
In article <48b9bc3d$0$874$,
Wykaaa wrote:
Il existe des langages orientes objets sans heritage, qui fonctionnent
et qui sont pleinement objets.


1) Cite-moi de tels langages.


Self


Si j'en crois : http://research.sun.com/self/, la dernière version date
de juin 2006. Il n'y a pas une activité débordante sur ce langage...
http://en.wikipedia.org/wiki/Self_(programming_language)



Et bien on ne peut pas dire que cet article soit de qualité (cf., par
exemple, le passage sur héritage/délégation). En fait, en Self, on sait
même faire de l'héritage multiple (cf.
http://research.sun.com/self/release_4.0/Self-4.0/Tutorial/Language/ImportantObjects/MultipleInheritance.html).
Ce n'est donc pas un bon exemple de langage objet sans héritage !!



Pour self, je n'ai pas verifie en detail, ca fait longtemps que j'ai
regarde ces articles, et j'ai sans doute confondu avec un autre langage
objets bases sur les prototypes.


Merci de ne pas donner de référence sur Wikipedia qui n'est absolument
pas une source fiable concernant le logiciel.



Merci de ne pas eriger tes dogmes en realite objective, je n'ai pas
forcement le temps de trop creuser, mais les langages a prototypes sont
objets.


En ce qui me concerne, mes principales références sont les revues de
l'ACM et de l'IEEE. Elles me paraissent autrement sérieuses.



Ca m'etonnerait que tu les lises toutes. Tu as du rater celles qui
parlent d'approche objet dans les langages a prototype.


Pourquoi ne pas citer JavaScript qui me paraît le plus connu (surtout
avec AJAX)



Parce que je pratique encore moins javascript que d'autres langages.

2) Que veut dire "pleinement objet" ?


qui sont consideres comme langages objets par la communaute qui s'interesse
un peu en langages objets en dehors du cadre fortement type a la java/c++





Cette réponse est très orientée et partisane. Pourquoi, d'emblée, mettre
sur la table, à nouveau, la querelle sur le fort typage ?



Parce qu'elle me semble a la base de l'insistance que tu as a mettre
l'heritage au centre de l'oriente-objet.

Des tonnes de littérature existent sur le sujet et, sans polémiquer, le
fort typage a un intérêt certain pour construire des logiciels de
qualité (meilleure fiabilité, programmation sûre (au sens anglo-saxon du
terme : safe programming), coût moindre des phases de tests, etc.)



Donc des preoccupations industrielles qui ne sont pas forcement en phase
avec des envies d'expressivite.

Pour ma part, j'en ai un peu ras-la-casquette de la vision de plus en
plus etriquee des langages de programmation, on aurait du avoir un ou
deux nouveaux vrais langages ces dix dernieres annees, a la place on a
eu java.


3) Qu'est-ce, pour toi, que le paradigme objet ?



objet + methodes...



C'est un peu maigre comme définition car encore faut-il avoir
parfaitement défini ce qu'est un "objet".



Oui, j'avoue que j'ai la flemme, et comme de toutes facons tu es
parti pour camper sur tes positions, je n'ai pas forcement envie de
passer du temps a developper, ca ne servira pas a grand chose.


Mais manque de bol, t'as pas besoin de grand chose de plus...
Il suffit d'avoir des `objets' avec un mecanisme d'appel/de passage
de message qui invoque quelque chose de dependant de l'objet utilise
pour pouvoir parler de langage objet.

Un objet définit-il un type ?


Non, c'est un concept orthogonal. Tu peux tres bien faire de l'objet
sans typage, de meme que tu peux tres bien faire de la recursivite avec
le combinateur Y.

Objet au sens de l'analyse, de la conception, de la programmation ??
Quant aux méthodes, c'est juste un autre nom pour "sous-programme".
Si l'objet n'était que ça, le sujet ne mériterait pas autant de litérature.




pas forcement heritage, les langages bases sur la notion de prototype
fonctionnent par clonage d'objets existants, plus specialisation, et ca
marche aussi.



Les langages à base de prototype doivent être distingués des langages
objets même s'ils manipulent (soi-disant) des objets...



Okay, donc ta definition est auto-referente, puisque les langages
objets n'incluent que les langages dont tu consideres qu'ils sont
objets, en laissant de cote des langages legitimement consideres comme
objets, juste parce qu'ils n'ont pas certaines proprietes que tu consideres
comme capitales, et que je considere comme orthogonales pour definir un
langage objet.


Par exemple, je ne considère pas que JavaScript est véritablement un
langage à objets. Par contre c'est effectivement un langage à base de
prototype.



Libre a toi. Cote expressivite, pourtant, javascript est objets.

Cote theorique, les gens qui etudient ce genre de choses ont pondu le
omega-calcul, qui se rapproche du lambda-calcul, mais en rajoutant juste
ce qu'il faut pour modeliser les appels par methodes.





Confere
http://en.wikipedia.org/wiki/Object-oriented_programming_language





Type même de l'article qui engendre la confusion sur les langages objet.
Tout est mélangé. Cet article est vraiment du grand n'importe quoi et me
conforte dans l'idée que Wikipedia est tout sauf une référence sérieuse
concernant le logiciel...



Continue de t'ancrer dans tes certitudes, ca n'engage que toi.
Je note que tu ne commentes meme pas sur l'omega-calcul, as tu rate ce
passage de mon intervention.

Je suis, pour ma part, extremement heureux que wikipedia n'ait pas ete
nettoye par des censeurs dans ton genre et represente la diversite
des approches objets. wikipedia est une encyclopedie generaliste, pas
specialement orientee industrielle, et fort heureusement, il y a traine
des articles d'informatique avec des vrais bouts de reference a de la
recherche active dedans.

et en particulier la liste des `prototype-based languages'.



Oui, ben justement...




Pour les "pères" de l'objet (en particulier Grady Booch), objet =>
héritage et polymorphisme d'héritage.



Grady Booch a pondu une certaine methodologie tres industrielle, mais
il n'est heureusement pas tout seul... il existe d'autres facons de
faire de l'objet qu'avec un typage statique tres strict.





C'est justement l'intérêt d'avoir une méthodologie très industrielle,
comme tu dis. C'est la première fois que je vois reprocher qu'une
méthode soit industrielle. D'habitude on reproche plutôt qu'elle ne le
soit pas assez !



Ca depend de ce que tu veux faire. Si tu veux rester toute ta vie
avec des langages pas tres bandants, retourne faire du ada...

heureusement que parfois des gens sortent un peu des sentiers battus
et inventent de nouveaux concepts, ou declinent ceux existants sur
des pentes glissantes, sinon on ferait tous du fortranIV.


Je vois mal les logiciels spatiaux, militaires, centrales nucléaires,
etc. écrits avec des langages où l'héritage est dynamique...



Les langages à base de prototypes ou non fortement typés ont
certainement leur utilité mais dans les domaines que j'ai cités il n'est
même pas envisageable d'étudier leur emploi...



Rien a foutre, ca n'a, encore une fois, aucun rapport avec la notion
de langage objet.

Ce dont tu me parles, c'est de la methodologie industrielle a la Grady
Booch et UML, qui s'appuie sur le concept d'objet, dans une acception
extremement specifique et terriblement restrictive... un peu une envie
de tout classifier, de tout rentrer dans des cases.
Avatar
Antoine Leca
En news:48ba96bf$0$961$, Wykaaa va escriure:
Donc, pour résumer, l'approche objet s'appuie sur 4 concepts majeurs
de base :
- le concept d'abstraction (se matérialise par la notion de classe
dans un langage de programmation objet)

- le concept d'encapsulation qui permet à un objet (une classe donc)
de ne montrer à l'extérieur que ce qui est nécessaire à son
utilisation.
Ce concept est matérialisé dans les LOO (langages orientés objet) par
les directives de contrôle d'accès (private, protected, public)

- le concept de modularité (au sens objet) qui s'ppuie sur 2
principes :
- La forte cohésion : un objet ne traite que d'une seule
abstraction et il la traite entièrement
- Le faible couplage : minimisation des dépendances entre classes
et encapsulation
ATTENTION : cette notion de modularité est piégeuse car dans les
langages on a aussi la notion de package (regroupement de plusieurs
classes). Le faible couplage est souvent mis en oeuvre, dans les
grosses applications, au niveau des packages et non au niveau des
classes car la granularité est trop fine.

- Enfin le concept de hiérarchie. Il est mis en oeuvre, dans les LOO,
à travers l'héritage mais aussi à travers la composition/agrégation
d'objets.



Si on revient à C, le concept d'encapsulation est me semble-t-il traité par
la séparation .h/.c et des règles de gestion, et le concept de modularité
par d'autres règles de gestion, mais le langage n'est aucunement un
obstacle.
Le concept d'héritage est (toujours « me semble-t-il ») spécifiquement mis
en ouvre par les règles relatives aux pointeurs de structure et d'union.

Le concept d'abstraction tel que décrit ci-dessus n'a aucun sens pour moi.
Se reférerait-il à l'utilisation de pointeurs ?
Par exemple, il doit être plus difficile d'utiliser Fortran que C, justement
pour cette raison ?


Si j'ai bien compris, on peut faire ce genre d'approche orientée objets avec
le langage C plus quelques règles (communément observées) sur ce qui
s'appelle traditionellement en C la compilation séparée, c'est-à-dire le
découpage en module ?


Ce qui me surprend le plus à relire cet article, c'est que je n'ai même pas
mentionné les pointeurs de fonction... Comme à ma connaissance c'est un
ingrédient nécessaire à une API pour pouvoir y implanter des langages «
orientés objet », j'ai comme l'idée qu'il y a des choses qui ne sont pas
correctes ci-dessus. Donc, où est l'erreur ?


Antoine
Avatar
Wykaaa
Marc Espie a écrit :
In article <48ba661b$0$930$,
Wykaaa wrote:
Marc Espie a écrit :
In article <48b9bc3d$0$874$,
Wykaaa wrote:
Il existe des langages orientes objets sans heritage, qui fonctionnent
et qui sont pleinement objets.


1) Cite-moi de tels langages.


Self


Si j'en crois : http://research.sun.com/self/, la dernière version date
de juin 2006. Il n'y a pas une activité débordante sur ce langage...
http://en.wikipedia.org/wiki/Self_(programming_language)


Et bien on ne peut pas dire que cet article soit de qualité (cf., par
exemple, le passage sur héritage/délégation). En fait, en Self, on sait
même faire de l'héritage multiple (cf.
http://research.sun.com/self/release_4.0/Self-4.0/Tutorial/Language/ImportantObjects/MultipleInheritance.html).
Ce n'est donc pas un bon exemple de langage objet sans héritage !!



Pour self, je n'ai pas verifie en detail, ca fait longtemps que j'ai
regarde ces articles, et j'ai sans doute confondu avec un autre langage
objets bases sur les prototypes.



Je te rappelle que la discussion est partie de ta remarque, je cite :
"Il existe des langages orientes objets sans heritage, qui fonctionnent
et qui sont pleinement objets."

A ce titre, Self, langage à prototype possède l'héritage.
Prenons un autre langage à base de prototype comme Cecil. Il possède lui
aussi l'héritage (cf.
http://www.cs.washington.edu/research/projects/cecil/www/cecil.html)

Prenons maintenant l'omega language (cf.
http://www.pervasive.jku.at/About_Us/Staff/Blaschek/Omega/_Report/Language.html).
Je cite :
The key features of the Omega language are:

* pure object-orientedness
* prototypes instead of classes
==> * inheritance instead of delegation
* static typing
* genericity
* monomorphic types
* conditional assignments
==> * single inheritance
* single-rooted inheritance hierarchy
* garbage collection

Prenons maintenant Lisaac (qui me paraît le plus prometteur des langages
objet à prototype). Il possède lui aussi l'héritage : cf. page 5 de ce
document http://isaacos.loria.fr/download/Lisaac_RM_02.pdf

On pourrait continuer longtemps comme cela.

Il n'est donc pas vrai qu'il existe des langages objet qui ne possèdent
pas l'héritage. La seule différence (du point de vue de l'héritage)
entre les langages à objet "classiques" et les langages à objet basés
sur les prototype est que, dans les langages à prototype, l'héritage est
dynamique (on peut changer dynamiquement de parent).

Vérifie tes sources et tes connaissances avant d'affirmer des choses
fausses de façon péremptoire !



Merci de ne pas donner de référence sur Wikipedia qui n'est absolument
pas une source fiable concernant le logiciel.



Merci de ne pas eriger tes dogmes en realite objective, je n'ai pas
forcement le temps de trop creuser, mais les langages a prototypes sont
objets.



Ca, personne ne le conteste. Ce que je conteste c'est que tu affirmes
qu'ils n'ont pas de mécanisme d'héritage, ce qui est faux !


En ce qui me concerne, mes principales références sont les revues de
l'ACM et de l'IEEE. Elles me paraissent autrement sérieuses.



Ca m'etonnerait que tu les lises toutes. Tu as du rater celles qui
parlent d'approche objet dans les langages a prototype.



Je ne les ai pas ratées, simplement, je ne considère pas les langages à
base de prototype comme de "vrais" langages à objet. ce en quoi j'ai
tort, je le reconnais.


Pourquoi ne pas citer JavaScript qui me paraît le plus connu (surtout
avec AJAX)



Parce que je pratique encore moins javascript que d'autres langages.



La discussion ne porte pas sur nos pratiques personnelles respectives.
J'ose espérer qu'elle est plus générale que ça pour ceux qui nous lisent !

2) Que veut dire "pleinement objet" ?


qui sont consideres comme langages objets par la communaute qui s'interesse
un peu en langages objets en dehors du cadre fortement type a la java/c++





Cette réponse est très orientée et partisane. Pourquoi, d'emblée, mettre
sur la table, à nouveau, la querelle sur le fort typage ?



Parce qu'elle me semble a la base de l'insistance que tu as a mettre
l'heritage au centre de l'oriente-objet.



L'héritage n'implique pas forcément le fort typage (exemple SmallTalk).
Tu as besoin de sérieusement te remettre à niveau sur ces sujets...

Des tonnes de littérature existent sur le sujet et, sans polémiquer, le
fort typage a un intérêt certain pour construire des logiciels de
qualité (meilleure fiabilité, programmation sûre (au sens anglo-saxon du
terme : safe programming), coût moindre des phases de tests, etc.)



Donc des preoccupations industrielles qui ne sont pas forcement en phase
avec des envies d'expressivite.



??
Je place cette discussion sur le plan évidemment professionnel et
industriel. Je ne fais pas de l'informatique pour "bidouiller".

Pour ma part, j'en ai un peu ras-la-casquette de la vision de plus en
plus etriquee des langages de programmation, on aurait du avoir un ou
deux nouveaux vrais langages ces dix dernieres annees, a la place on a
eu java.



Pose-toi la question du pourquoi.
On a besoin de langages de plus en plus professionnels pour fabriquer
des logiciels de + en + fiables compte tenu de l'importance des
problèmes qu'on automatisent aujourd'hui.


3) Qu'est-ce, pour toi, que le paradigme objet ?


objet + methodes...


C'est un peu maigre comme définition car encore faut-il avoir
parfaitement défini ce qu'est un "objet".



Oui, j'avoue que j'ai la flemme, et comme de toutes facons tu es
parti pour camper sur tes positions, je n'ai pas forcement envie de
passer du temps a developper, ca ne servira pas a grand chose.



Je ne campe pas sur mes positions, j'essaie de donner des références
objectives à ce que je raconte qui n'est pas "mon" point de vue mais
celui de la profession (à travers ses organismes représentatifs que sont
ACM, IEEE, W3C, OASIS, OMG, etc.)


Mais manque de bol, t'as pas besoin de grand chose de plus...
Il suffit d'avoir des `objets' avec un mecanisme d'appel/de passage
de message qui invoque quelque chose de dependant de l'objet utilise
pour pouvoir parler de langage objet.



Non, encore une fois ceci est une affirmation gratuite et, plus grave,
fausse.

Un objet définit-il un type ?


Non, c'est un concept orthogonal. Tu peux tres bien faire de l'objet
sans typage, de meme que tu peux tres bien faire de la recursivite avec
le combinateur Y.



OK. Je suis d'accord que le typage est un concept mineur dans l'objet.
Y = λf.(λx.f(x x))(λx.f(x x)), puisque c'est le combinateur de point
fixe, il est encore heureux qu'on puisse faire de la récursion avec
(c'est la moindre des choses, non ?)
Figure-toi que j'ai aussi enseigné le λ-calcul.

Objet au sens de l'analyse, de la conception, de la programmation ??
Quant aux méthodes, c'est juste un autre nom pour "sous-programme".
Si l'objet n'était que ça, le sujet ne mériterait pas autant de litérature.




pas forcement heritage, les langages bases sur la notion de prototype
fonctionnent par clonage d'objets existants, plus specialisation, et ca
marche aussi.


Les langages à base de prototype doivent être distingués des langages
objets même s'ils manipulent (soi-disant) des objets...



Okay, donc ta definition est auto-referente, puisque les langages
objets n'incluent que les langages dont tu consideres qu'ils sont
objets, en laissant de cote des langages legitimement consideres comme
objets, juste parce qu'ils n'ont pas certaines proprietes que tu consideres
comme capitales, et que je considere comme orthogonales pour definir un
langage objet.


Par exemple, je ne considère pas que JavaScript est véritablement un
langage à objets. Par contre c'est effectivement un langage à base de
prototype.



Libre a toi. Cote expressivite, pourtant, javascript est objets.



Oui certes

Cote theorique, les gens qui etudient ce genre de choses ont pondu le
omega-calcul, qui se rapproche du lambda-calcul, mais en rajoutant juste
ce qu'il faut pour modeliser les appels par methodes.





Confere
http://en.wikipedia.org/wiki/Object-oriented_programming_language







Je ne vois nulle trace d'omega-calcul dans cette page.

Type même de l'article qui engendre la confusion sur les langages objet.
Tout est mélangé. Cet article est vraiment du grand n'importe quoi et me
conforte dans l'idée que Wikipedia est tout sauf une référence sérieuse
concernant le logiciel...



Continue de t'ancrer dans tes certitudes, ca n'engage que toi.
Je note que tu ne commentes meme pas sur l'omega-calcul, as tu rate ce
passage de mon intervention.



Pas du tout mais l'omega-calcul semble être un truc "underground". Ce
que je connais sont : le Lambda Calcul des Objets de Fisher, Honsell, et
Mitchell pour les aspects objets, et le calcul lambda-sigma-w-a de
Benaissa, Lang, Lescanne, et Rose pour la description de la sémantique
opérationnelle et du partage.

Je suis, pour ma part, extremement heureux que wikipedia n'ait pas ete
nettoye par des censeurs dans ton genre et represente la diversite
des approches objets. wikipedia est une encyclopedie generaliste, pas
specialement orientee industrielle, et fort heureusement, il y a traine
des articles d'informatique avec des vrais bouts de reference a de la
recherche active dedans.



Je ne suis pas un censeur. J'exprime mon point de vue comme tu exprimes
le tien et j'essaie d'argumenter mon point de vue à l'aide de références
sérieuses.

et en particulier la liste des `prototype-based languages'.


Oui, ben justement...



Pour les "pères" de l'objet (en particulier Grady Booch), objet =>
héritage et polymorphisme d'héritage.


Grady Booch a pondu une certaine methodologie tres industrielle, mais
il n'est heureusement pas tout seul... il existe d'autres facons de
faire de l'objet qu'avec un typage statique tres strict.





C'est justement l'intérêt d'avoir une méthodologie très industrielle,
comme tu dis. C'est la première fois que je vois reprocher qu'une
méthode soit industrielle. D'habitude on reproche plutôt qu'elle ne le
soit pas assez !



Ca depend de ce que tu veux faire. Si tu veux rester toute ta vie
avec des langages pas tres bandants, retourne faire du ada...



Je ne crois pas que les langages soient faits pour nous faire bander. Il
y a bien d'autres occasions pour ça.
Je parle des langages d'un point de vue professionnel et pas d'un point
de vue ludique qui n'a rien à voir avec le sujet initial.

heureusement que parfois des gens sortent un peu des sentiers battus
et inventent de nouveaux concepts, ou declinent ceux existants sur
des pentes glissantes, sinon on ferait tous du fortranIV.



Justement, ce qui est difficile c'est de faire preuve d'inventivité au
service de causes utiles.
Ceci dit, j'ai fait de la musique en Fortran IV (dans les années 70).


Je vois mal les logiciels spatiaux, militaires, centrales nucléaires,
etc. écrits avec des langages où l'héritage est dynamique...



Les langages à base de prototypes ou non fortement typés ont
certainement leur utilité mais dans les domaines que j'ai cités il n'est
même pas envisageable d'étudier leur emploi...



Rien a foutre, ca n'a, encore une fois, aucun rapport avec la notion
de langage objet.



Ben si justement car, intervenant dans les domaines que j'ai cités, je
n'ai vu que du C++, du Java, un peu de C et du C# qui pointe son nez.
Toutes les applications, ou presque, étant spécifiées en UML.

Ce dont tu me parles, c'est de la methodologie industrielle a la Grady
Booch et UML, qui s'appuie sur le concept d'objet, dans une acception
extremement specifique et terriblement restrictive... un peu une envie
de tout classifier, de tout rentrer dans des cases.



je suis désolé de te dire que ces approches ne sont absolument pas
"extrêmement spécifiques" ni "terriblement restrictives" mais qu'elles
correspondent à des besoins tout à fait généraux dans le domaine de
l'ingénierie système (et pas seulement logicielle).

C'est plutôt toi le censeur...