З боку кандидата більш нормальним буде сказати: «буду гуглити незнайомий алгоритм», — а не дістати смартфон і почати гуглити його.
Off-topic
на полустанке полумесяц
смотрел в окно и видел как
в полупустом полувагоне
томился полупроводник
© siberian_huskie
Відносининасправді стосунки
Off-topic. Правильно буде не «зарплатня», а «платня».
Simula 67, не 68.
Я це «вичитав» у декількох книжках про програмування мовою Simula 68, мовою Turbo Pascal (коли він уже став об’єктно-орієнтованим) і мовою C++. Але і в наш час можна про це прочитати. Наприклад, тут: uk.wikipedia.org/...
У той же час якась мова може не відповідати другому, але завжди має відповідати першому принципу поліморфізму (я маю на увазі поліморфізм об’єкта), щоб належати до об’єктно-орієнтованих мов.
На практиці розуміння таких принципів допомагає не писати
if (dog typeof SlimDog) { dog.setCollar(new NarrowCollar()); } else if (dog typeof FatDog) { dog.setCollar(new WideCollar()); } else { throw new IllegalArgumentException("Unknown type " + dog.getClass()); }там, де можна написати
dog.chooseCollar();
Ось ви знущаєтесь, а я ж не казав, що цей принцип в ООП треба трактувати так, як його реализовано в мовах програмування, це вже ви домислили.
По-друге, акцент був не на тому, що ООП базується на чомусь іще, а на тому, що поліморфізм в контексті ООП це не те ж саме, що поліморфізм поза його контекстом.
Справа в тому, що сама парадігма ООП базується на трьох принципах: поліморфізм, спадкування та інкапсуляція. І ось саме цей поліморфізм передбачає цілком конкретні ознаки (їх ми тут уже обговорили багато разів). Те, що є поліморфним і поза контекстом ООП, не є тим поліморфізмом, про який ідеться в контексті ООП.
Дізнатися б, що таке hidding... :)
Ми в решті решт дійшли спільного конструктивного висновку, а ви тим часом можете продовжувати ідентифікувати нас як тролів. :)
Поліморфізм в ООП (той, який не реалізуєш у процедурному чи функціональному програмуванні) передбачає саме різну реалізацію операції в різних підкласах — коли в програмі не потрібні операції if
та typeof
.
До речі, на властивості поліморфізму ґрунтується принцип підстановки Барбари Лісков uk.wikipedia.org/...
сутність не в словах often simply, а в тому, що два інші випадки не стосуються ООП.
“Chris Strachey[4] chose the term ad hoc polymorphism to refer to polymorphic functions that can be applied to arguments of different types, but that behave differently depending on the type of the argument to which they are applied (also known as function overloading or operator overloading). The term ‘ad hoc’ in this context is not intended to be pejorative; it refers simply to the fact that this type of polymorphism is not a fundamental feature of the type system. In the example below, the Add functions seem to work generically over various types when looking at the invocations, but are considered to be two entirely distinct functions by the compiler for all intents and purposes”, тобто тут ми не зможемо просто підставити інший об’єкт, щоб він виконав ту саму операцію. Нам треба буде викликати іншу операцію, хоча і з тим самим ім’ям, і передати їй ще якісь аргументи.
“Parametric polymorphism allows a function or a data type to be written generically, so that it can handle values uniformly without depending on their type.[6] Parametric polymorphism is a way to make a language more expressive while still maintaining full static type-safety”, тобто тут теж не йдеться про поліморфізм операцій.
А третій тип це саме той поліморфізм, який ми обговорюємо.
Ваші аргументи я не ігнорую, а не погоджуюся з ними.
Конкретизуйте питання.
Ось що з звідти можна почерпнути: об’єктно-орієнтованій парадигмі відповідає лише третій тип зі татті: “Subtyping (also called subtype polymorphism or inclusion polymorphism): when a name denotes instances of many different classes related by some common superclass.[3] In the object-oriented programming community, this is often simply referred to as polymorphism”
Як виглядають пости студентів-відмінників перших курсів, теми дискусії не стосується.