LINUX.ORG.RU

Полиморфизм? - Можно кормить Зайку мясом?

 


0

3

Какие принципы ООП вы знаете?

Их четыре:
▫️наследование;
▫️инкапсуляция;
▫️полиморфизм;
▫️абстракция.

🔹Наследование
Наследование позволяет новому классу наследовать атрибуты и методы уже существующего класса. Новый класс называется производным (дочерним). Существующий — базовым (родительским).

🔹Инкапсуляция
Этот принцип заключается в ограничении доступа к внутренним методам и переменным класса извне. В Python принцип реализован лишь на уровне соглашений: приватные атрибуты выделяются подчёркиванием — одинарным _ или двойным __. Эти подчёркивания сигнализируют другим программистам о приватности. Однако доступ к ним всё равно можно получить. 

🔹Полиморфизм
Полиморфизм позволяет использовать одну функцию для разных форм (типов данных). В Python это проявляется, например, когда дочерний класс переопределяет методы родительского класса или когда разные классы имеют методы с одинаковыми именами, но собственной реализацией.

🔹Абстракция
Абстракция позволяет определить общее поведение для группы объектов. Это достигается путём создания классов, которые имеют некоторые общие свойства и методы, но не включают все детали реализации.

#вопросы_с_собеседований

Наследование - всё ясно. Из одного Зайки - можно сделать второго. Гораздо большего размера с разным цветом глаз - Свойства

Инкапсуляция - Зайку резать нельзя. Можно кормить - вход. Убирать дерьмо - выход. Зайка может прыгать - Методы.

Полиморфизм? - Можно кормить Зайку мясом? Или можно «прикрутить» к нему крылья?

Абстракция? - Зайка и Крокодил могут прыгать вместе? - Используя одно и тоже Свойство?

Перемещено leave из general



Последнее исправление: sokolov (всего исправлений: 1)
Ответ на: комментарий от rtxtxtrx

Лет как 30

Modular programming per se, with a goal of modularity, developed in the late 1960s and 1970s, as a larger-scale analog of the concept of structured programming (1960s). The term «modular programming» dates at least to the National Symposium on Modular Programming, organized at the Information and Systems Institute in July 1968 by Larry Constantine

Или ты о каких модулях? О тех, что в Си? - То не модули

О тех, что в Modula и Standard ML, например.

А почему те, что в Си — не модули?

korvin_ ★★★★★
()
Ответ на: комментарий от korvin_

А почему те, что в Си — не модули?

потому что в С++20 пришлось все-таки изобрести модули, чтобы в си появились модули. Ну то есть те что были модули не очень то были модулями. Или новые модули, это сверхмодули?

FishHook
()
Ответ на: комментарий от korvin_

А почему те, что в Си — не модули?

Потому что там при коНпеляции «код вставляется», и тож самое C#/Java. Это сродни похапе, где написал require "foo";, и у тебя «код поДставился». Модуль - это что-то функциональное, в пистоне - готовый паттерн-синглтон, те ты можешь в нем переопределять переменные, манки-патчингом заниматься… ну и в ноде так же

rtxtxtrx ★★★
()
Последнее исправление: rtxtxtrx (всего исправлений: 1)
Ответ на: комментарий от rtxtxtrx

Потому что там при коНпеляции «код вставляется»

Какой код куда вставляется?

и тож самое C#/Java.

WUT? ClassLoader для тебя шутка что ли? Какой код куда «подставился»?

Модуль - это что-то функциональное

Что значит «функциональное»? Как в Хаскелле? Как лямбды? При чём тут ООП тогда?

ты можешь в нем переопределять переменные, манки-патчингом заниматься… ну и в ноде так же

Это в каком определении модульности написано «можно заниматься манки-патчингом»? И при чём тут ООП тогда?

korvin_ ★★★★★
()
Последнее исправление: korvin_ (всего исправлений: 1)
Ответ на: комментарий от FishHook

потому что в С++20 пришлось все-таки изобрести модули, чтобы в си появились модули. Ну то есть те что были модули не очень то были модулями. Или новые модули, это сверхмодули?

Речь шла про Си, а не Си++, но в любом случае, а новые модули --- это модули или не модули?

korvin_ ★★★★★
()
Ответ на: комментарий от korvin_

Вы же понимаете, что в каждом языке программирования можно дать собственное определиние модулю и пакету? Если мы будем подходить с терминологических позиций, то этот спор будет бесконечным. Я для себя считаю так, что модуль - это прежде всего область видимости, это его имманентное свойство, т.е. в каком бы ЯП мы не вводили понятия модуля, это нововведение должно прежде всего решать проблему области видимости определений, а дальше опционально модификаторы доступа, единицы компиляции и пр. В си очень всё паскудно с областями видимости ибо #ifndef

FishHook
()
Ответ на: комментарий от FishHook

Я для себя считаю так, что модуль - это прежде всего область видимости, это его имманентное свойство, т.е. в каком бы ЯП мы не вводили понятия модуля, это нововведение должно прежде всего решать проблему области видимости определений

А в некоторых языках для этого есть слово namespace.

korvin_ ★★★★★
()
Ответ на: комментарий от korvin_

Речь изначально пошла про ООП вообще.

а это бессмысленно, потому что мы можем открыть мануал по тому же питону и прочитать определение

A module is a file containing Python definitions and statements. The file name is the module name with the suffix .py appended. Within a module, the module’s name (as a string) is available as the value of the global variable name.

вот и все, любой отдельный файл - это модуль. Попробуем натянуть это на C# с их partial классами и фигня получится.

FishHook
()