Le fait est que, pour moi, en tout cas, la conception n'a réellement de sens et d'utilité que... parce qu'elle trace un chemin pour l'implémentation...
Mais la conception reste, malgré tout, selon moi une nécessité absolue:
Il ne s'agit, bien sur, que de mon point de vue, mais, selon moi, il est mauvais et dangereux de vouloir dissocier le processus de conception de celui de l'implémentation:
ils prennent tous deux place dans un processus qui commence avec la demande d'un client "je voudrais une application qui..." et qui s'achève (plus ou moins, mais il faut encore considérer le problème de la maintenace ;)) avec la livraison de l'application demandée, le premier devant "ouvrir et baliser la voie" pour que le second puisse s'envisager sereinement.
Si tu te trouve une fois dans une situation dans laquelle il t'est impossible d'implémenter ce qui a été conçu, tu fera l'effort de t'adapter.
Si tu te trouve quasiment systématiquement dans une situation dans laquelle il t'est impossible d'implémenter ce qui a été conçu, tu va très rapidement (être tenté de) décréter que "la conception ne sert à rien" ou que "c'est une perte de temps" et renoncer à y recourir...
Or, ce forum et la vie de tous les jours fourmillent d'exemples qui tendent à prouver toute l'utilité de la conception et les risques encourus lorsque l'on n'y a pas apporté une "attention suffisante".
LSP ne s'applique pas uniquement entre deux niveaux (entre la classe mère et son héritière directe), mais, aussi (et surtout :question:) sur l'ensemble des niveaux de la hiérarchie d'héritage publique...
C'est à dire que, pour le respecter, une propriété valide pour l'arrière-arrière-arrière-arrière-grand mère d'une classe doit l'être également pour son arrière-arrière-arrière-arrière-petite fille.
La conséquence directe étant que, tu dois pouvoir "sans te poser de question" décider d'utiliser n'importe quelle classe "ancêtre" comme type à utiliser pour créer une collection d'objets, et que tu dois pouvoir y placer et utiliser (même si c'est en étant limité à l'interface de la classe ancêtre) ... n'importe quelle objet qui en dérive de manière directe ou indirecte.
Et ce que je reproche aux langages "tout objet" (bien que je sache parfaitement faire avec), c'est que, oui, on peut dire de n'importe quoi que "c'est un objet", mais qu'il est, surtout si l'on en reste au niveau de l'étude du langage et que l'on ne peut donc, a priori, pas déterminer l'usage qui sera fait de celui-ci, impossible de déterminer un ensemble de propriétés qui, quoi qu'il arrive, quel que soit le type de l'objet créé, représentera le "plus petit ensemble" de propriétés correctes et valides du point de vue de LSP...
En effet, si tout dérive de manière (très certainement) indirecte de la classe Object (quelle que soit l'orthographe choisie), tu es susceptible de placer un objet de type voiture (qui dérive de véhicule à moteur, qui dérive de véhicule, qui dérive de matière inorganique, qui dérive d'objet) et un objet de type pomme (qui dérive de fruit, qui dérive de matière organique, qui dérive d'objet) dans une même collection basée sur le type Object...
Or, j'ai beau chercher, je ne vois pas d'ensemble de propriétés communes entre une pomme et une voiture...
Cela n'est qu'un exemple, mais je pourrais le reproduire avec la très grosse majorité des types que l'on est susceptible de vouloir créé ;)