Об'єктно-орієнтоване програмування - це не синтаксичні особливості, це філософія кодування та дизайну. В його основі лежить концепція об'єкта , яка є конструкцією, яка групує стан підпрограм, щоб діяти на нього (або, залежно від вашої точки зору, відповіді на повідомлення). Іншим важливим аспектом OOP є інкапсуляція : загортання деталей реалізації в непрозорі структури та з'єднання їх через чітко визначені інтерфейси. Майже все інше в теорії ООП сходить до цих двох основ.
Отже, будь-яка мова, яка може якось моделювати об'єкти (сутності, що містять і дані, і код) та інкапсуляцію, може використовуватися для створення OOP. Наприклад, на C ви можете використовувати покажчики функцій для зберігання функцій у структурах, а можна використовувати заголовок / вихідну файлову систему для реалізації інкапсуляції. Це не зручно, але досить зробити OOP. Ви, мабуть, навіть можете згорнути щось на зразок Haskell або ML у виконанні OOP, і я не здивуюсь, якби хтось міг придумати спосіб проведення OOP в зборі.
Однак практично мовою можна назвати "об'єктно-орієнтовану", якщо вона пропонує повний набір функцій синтаксису для явного об'єктно-орієнтованого програмування. Як правило, це означає, що така мова повинна мати: * поняття про об'єкт * поняття про виклик методу або передачу повідомлення * зручний та простий спосіб управління доступом до членів об’єкта * зручний та простий спосіб визначення інтерфейсів
Отже, я би назвав фрагмент кодового об'єкта, якщо він дотримується принципів OOP та використовує наявний синтаксис OOP.
До речі, ваш приклад коду, ймовірно , використовує поліморфізм та віртуальні функції, хоча синтаксис C не робить це очевидним. Я не фахівець з SDL, але сподіваюся, SDL_surface
що зможу представляти різні типи поверхонь, кожна зі своїм специфічним набором реалізацій - для того, щоб щось вибивати на біт-карту пам’яті, а блискавка до поверхні екрана вимагає докорінних відмінностей код, але інтерфейс (функції, які беруть SDL_surface*
аргумент) залишається тим самим. Так само, він також реалізує інкапсуляцію: ви не можете отримати доступ до основного представлення поверхні безпосередньо, ви повинні пройти функції, які вміють обробляти SDL_surface
, тому що це все, що у вас є. Це приємний приклад того, як ви робили OOP у C.