%%=====================================================================================
%%
%%       Filename:  cours.tex
%%
%%    Description:  
%%
%%        Version:  1.0
%%        Created:  03/06/2024
%%       Revision:  none
%%
%%         Author:  YOUR NAME (), 
%%   Organization:  
%%      Copyright:  Copyright (c) 2024, YOUR NAME
%%
%%          Notes:  
%%
%%=====================================================================================
\documentclass[a4paper, titlepage, 12pt]{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage[french]{babel}
\usepackage{amsmath, amssymb}
\usepackage{amsthm}
\usepackage[svgnames]{xcolor}
\usepackage{thmtools}
\usepackage{lipsum}
\usepackage{framed}
\usepackage[skip=12pt, indent=24pt]{parskip}
\usepackage{titlesec}
\usepackage{newtxtext}
\usepackage{setspace}
\usepackage{hyperref}

% \renewcommand{\familydefault}{\sfdefault}

\onehalfspacing
% \geometry{
% a4paper,
% textwidth=160mm,
% textheight=240mm
% }
% figure support
\usepackage{import}
\usepackage{xifthen}
\pdfminorversion=7
\usepackage{pdfpages}
\usepackage{transparent}
\newcommand{\incfig}[1]{%
	\def\svgwidth{\columnwidth}
	\import{./figures/}{#1.pdf_tex}
}

\pdfsuppresswarningpagegroup=1

\newenvironment{AQT}{{\fontfamily{qbk}\selectfont AQT}}

\usepackage{LobsterTwo}
\titleformat{\section}{\LobsterTwo \huge\bfseries}{\thesection.}{1em}{}
\titleformat{\subsection}{\vspace{2em}\LobsterTwo \Large\bfseries}{\thesubsection.}{1em}{}
\titleformat{\subsubsection}{\vspace{1em}\LobsterTwo \large\bfseries}{\thesubsubsection.}{1em}{}

\newenvironment{lititle}%
{\vspace{7mm}\LobsterTwo \large}%
{\\}

\renewenvironment{proof}{$\square$ \footnotesize\textit{Démonstration.}}{\begin{flushright}$\blacksquare$\end{flushright}}

\newenvironment{longquote}%
{\vspace{-9pt}\begin{center}\begin{minipage}{120mm}\singlespacing\footnotesize «}%
{»\end{minipage}\end{center}\vspace{9pt}}

\title{La programmation objet expliquée par la théorie des Idées platonicienne}
\author{
	William Hergès\thanks{Sorbonne Université}
}


\begin{document}
	\maketitle
	\tableofcontents
	\newpage

	J'utilise les acronymes suivants~:
	\begin{itemize}
		\item \verb|POO| pour programmation orientée objet, synonyme de programmation objet
	\end{itemize}

	\newpage
	\section{Introduction}
	Je fréquente beaucoup de développeurs et une bonne partie d'entre eux est intéressée par la philosophie, mais ils ne savent pas du tout par où commencer. Cette absence de repère est totalement compréhensible quand nous faisons face à une montagne de connaissance s'étalant de l'Antiquité lointaine à maintenant. Trouver une entrée accessible dans ces plus de 2500 ans d'histoire est une tache dantesque pour une personne seule.

	En tant qu'étudiant en double licence Science-Philosophie, plus précisément en Informatique-Philosophie, je trouve qu'il est de mon devoir de lier ces deux disciplines que tout semble éloigner, notamment pour ceux venant de l'un cherchant à comprendre l'autre. Ce travail personnel encadré (TPE) de la faculté des lettres a été pensé en parallèle avec le sujet que je traite dans l'atelier de recherche encadré (ARE) de la faculté des sciences et d'ingénierie. Ici, j'essaierai de lier la philosophie à l'informatique tandis que mon projet en ARE s'occupera de lier l'informatique à la philosophie.

	Pour initier les philosophes à l'informatique, j'ai décidé de vulgariser la programmation objet (POO), un paradigme fondamental en informatique, à l'aide de la théorie des Idées de Platon. Cette théorie philosophe me parait être la meilleure manière d'initier à ce concept informatique particulièrement utilisé en entreprise et très répandu~\cite{MostUsedLanguages2024}. En effet, de nombreux concepts de cette programmation se rapprochent grandement de la théorie platonique de la connaissance~: les objets en POO seraient les Idées de Platon et l'instance d'un objet serait l'équivalent de son image.

	Avant de plus détailler les liens entre la théorie des Idées et la programmation objet, il me semble essentiel de rappeler l'essence de cette théorie philosophique. Ensuite, je détaillerai ces liens étonnants.

	\newpage
	\section{La théorie des Idées platoniciennes}
	Platon, philosophe antique majeur, a exercé une influence considérable sur toute la philosophie, notamment grâce à sa méthode didactique et ses théories métaphysiques~\cite{Platon2025}.

	La plus importante de tout est sûrement celle stipulant l'existence d'Idées indépendamment de toute réalité sensible~: le concept d'âme, de Beau ou de Juste font partie de cette réalité différente. Ces concepts, par opposition aux réalités changeantes du monde sensible, sont immuables~: ils ne dépendent pas de notre perception ou de notre opinion. Cette propriété leur permet d'être les objets de la connaissance et de la définition. En effet, en étant immuable, et donc universelle et éternelle, tout savoir sur les Idées sera universellement vrai et applicable partout~\cite{platonTheetete2016}.

	La théorie des Idées permet de construire des objets stables de la connaissance~: un cheval qu'il soit blanc ou noir, petit ou grand, maigre ou fort reste un cheval, peu importe ses variations accidentelles. Ce qui définit le cheval ne dépend donc pas de sa représentation sensible, comme pour toutes les autres définitions. C'est cette universalité que Platon appelle Idée~\cite{platonTheetete2016}.

	Ces Idées permettent de comprendre tous les objets en découlant~: en étudiant le cheval en soi, j'étudie ce qui définit le cheval, permettant alors de comprendre tous les chevaux possibles. Cela s'oppose à l'étude des propriétés accidentelles des objets, comme la couleur de la robe du cheval, qui ne permettent de comprendre qu'un individu isolé.

	Cette relation est très similaire à celle liant la peinture à son modèle. En effet, la peinture représente le modèle d'une manière imparfaite~: certaines proportions ne sont pas respectées, les couleurs ne sont pas identiques, sa position ressemble sans pour autant être la même. Toutes ces variations sont accidentelles puisqu'elles ne redéfinissent pas le modèle de la peinture~: nous sommes toujours capables de voir un cheval dans une peinture représentant un cheval. Pour expliciter plus le parallèle entre peinture et modèle, la peinture serait l'équivalent de la représentation sensible («~dans notre monde~») de l'Idée intelligible, qui serait le modèle~\cite{platonSophiste2022}.

	Toute cette théorie permet d'expliciter l'importance de la définition tout en possibilisant la vérité~: les connaissances ne portent que sur les Idées (il est inutile d'analyser les choses accidentelles puisqu'elles changent), ce qui les rend universelles, donnant ainsi accès à la vérité~\cite{platonTheetete2016}.

	\newpage
	\section{Explication de la programmation objet à l'aide la théorie des Idées}

	Quand un développeur conçoit un programme, un logiciel, un site web, il a le choix entre plusieurs approches. Toutes possèdent des avantages comme la robustesse de sa conception et des inconvénients comme la difficulté d'utilisation de la technologie. La programmation objet (POO) est une approche spécifique d'un problème~: elle vise à construire des objets génériques qui représentent les états du système. Cette vision de la programmation est si importante qu'elle est considérée comme un paradigme~: ce choix modifie grandement l'approche du problème et donc sa résolution~\cite{ParadigmeProgrammation2025}.

	La POO est très utilisée en entreprise pour sa robustesse et sa portabilité. En effet, en créant un objet représentant un état précis d'un sous-système, on contraint le système à être dans un état forcément connu. De plus, de nombreux langages mettant en place de la POO ne dépendent pas du système d'exploitation ou de l'architecture de la machine pour fonctionner, comme Java~\cite{JavaTechnique2024}, Python~\cite{PythonLangage2025} ou Ruby~\cite{Ruby2025}. Par contre, son principal désavantage est son absence de flexibilité directement impliquée par sa grande robustesse. De plus, cette approche est souvent plus lourde sur les performances~\cite{pereiraEnergyEfficiencyProgramming2017} et sur l'écriture du programme.

	Mais, concrètement, quelle est l'essence POO~?

	Dans une application construite à l'aide la POO, toutes les choses sont représentées à l'aide d'objets, que ça soit la fenêtre de l'application, le texte qui s'affiche ou les boutons sur lesquels l'utilisateur peut appuyer. Ces objets sont définis à l'avance par le développeur~: l'objet représentant un texte devra posséder le texte à afficher et l'objet «~bouton~» devra savoir quelle action effectuée si l'utilisateur clique dessus. Ces définitions ne sont pas particulières~: elles sont générales. Elles doivent contenir toutes les représentations possibles des choses utilisant l'objet~\cite{ProgrammationOrienteeObjet2025}. Ce concept est l'équivalent des Idées chez Platon. En effet, l'Idée de bouton est immuable et sert à définir le bouton, ce qui s'apparente totalement au rôle de l'objet dans la POO. 

	Pour utiliser un objet, on crée une instance de ce dernier. Cette instance est particulière et unique~: elle possède ses propres caractéristiques découlant de l'objet. Par exemple, une instance de l'objet «~bouton~» possède sa propre action à exécuter quand l'utilisateur clique dessus~\cite{ProgrammationOrienteeObjet2025}. Le lien entre l'instance et l'objet est le même que celui entre le sensible et l'intelligible. L'objet est l'Idée et une instance particulière d'un objet est un objet sensible avec lequel nous pouvons rentrer en contact numériquement. Cette vision est aussi confirmée par l'interaction de l'utilisateur avec le programme~: ce dernier n’interagit numériquement qu'avec des instances d'objet (on ne peut pas interagir numériquement avec un objet, sinon cela reviendrait à interagir numériquement avec une définition, ce qui n'a pas de sens), comme nous qui ne pouvons interagir qu'avec des objets sensibles dans notre monde sensible.

	La POO facilite la création d'objet à l'aide de l'héritage, c'est-à-dire qu'un objet peut hériter les propriétés d'un autre. On peut ainsi créer l'objet «~texte avec un lien~» en héritant les propriétés de l'objet «~texte~» et en lui rajoutant la fonctionnalité permettant de cliquer. Cet héritage permet d'éviter de se répéter~: on ne réexplique pas deux fois ce qu'est un texte, on indique juste à l'ordinateur de regarder comment fonctionne l'objet «~texte~» et d'appliquer la même logique pour le nouvel objet~\cite{ProgrammationOrienteeObjet2025}. L'équivalent de l'héritage dans le monde intelligible serait, par exemple, de donner l'Idée de «~lit~» puis d'en tirer l'idée de «~lit double~». On aurait ainsi que les liens entre «~texte~» et «~texte avec un lien~» et entre «~lit~» et «~lit double~» est similaire.

	Pour résumer, la programmation orienté objet est une approche particulière de la programmation résolvant les problèmes à l'aide de la construction d'objet. Il s'agit d'un analogue à l'Idée platonicienne dans son rôle~: ce dernier sert la définition et n'est pas directement accessible à l'utilisateur. L'instance de cet objet est la représentation numérique singulière de l'objet~: elle est définie par l'objet, mais possède ses propres particularités accidentelles. Elle est l'analogue de l'objet sensible de la théorie des Idées puisqu'elle est définie par l'objet et que l'utilisateur interagit numériquement avec. Il existe aussi un système d'héritage entre les différents objets pour éviter de répéter des principes. Ce système ressemble au lien entre les Idées de «~lit~» et de «~lit double~».

	\newpage
	\section{Conclusion}
	La théorie des Idées est la théorie métaphysique centrale dans la pensée de Platon. C'est à l'aide de cette dernière qu'il peut justifier toute sa philosophie~: degrés de connaissance, utilité de l'âme et réminiscence découlent des Idées. Ces concepts supplémentaires n'ont, à mes yeux, aucune équivalence en POO, ou plus généralement en programmation. Cette analogie est donc limitée à la théorie des Idées seule, ce qui est contrintuitif quand on connait l'importance des autres théories platoniciennes dans sa métaphysique.

	De plus, cette analogie reste une forme de vulgarisation de la POO, sans jamais rentrer dans les détails de son fonctionnement intrinsèque. Elle parait donc difficilement utilisable pour apprendre à développer.

	Par contre, elle ne se limite pas à un simple but éducatif. La POO peut véritablement être vue comme une manière de définir un nouveau monde intelligible numérique (tous les états possibles du sensible de ce monde sont représentés par des objets de son intelligible), ce que je trouve philosophiquement très intéressant.
	
	\newpage
	\bibliographystyle{unsrt}
	\bibliography{biblio}
\end{document}
