Слово «полиморфизм» означает наличие множества форм. Обычно полиморфизм возникает, когда существует иерархия классов и они связаны между собой наследованием.
Полиморфизм Objective-C означает, что вызов функции-члена вызовет выполнение другой функции в зависимости от типа объекта, вызывающего функцию.
Полиморфизм — способность различных объектов реагировать на одно и то же сообщение по-своему называется полиморфизмом.
Поскольку каждый класс принадлежит пространству имен этого класса, это делает полиморфизм возможным. Имя в определении класса и имя вне определения класса не будут конфликтовать в этом случае.
Переменные экземпляра класса и методы класса имеют следующие характеристики:
Имя метода является частью интерфейса объекта. Имя сообщения, полученного объектом, является именем вызванного метода. Поскольку разные объекты могут иметь методы с одинаковым именем, объект должен уметь понимать смысл сообщения. Одно и то же сообщение посылается разным объектам, что приводит к различным операциям.
Но довольно сухой теории, давайте рассмотрим сразу пример: у нас есть класс Shape
, который предоставляет базовый интерфейс для всех фигур. Квадрат и прямоугольник являются производными от базового класса Shape
.
Далее, у нас есть метод printArea
, который покажет особенность ООП — полиморфизм.
#import <Foundation/Foundation.h> @interface Shape : NSObject { CGFloat area; } - (void)printArea; - (void)calculateArea; @end @implementation Shape - (void)printArea { NSLog(@"The area is %f", area); } - (void)calculateArea { } @end @interface Square : Shape { CGFloat length; } - (id)initWithSide:(CGFloat)side; - (void)calculateArea; @end @implementation Square - (id)initWithSide:(CGFloat)side { length = side; return self; } - (void)calculateArea { area = length * length; } - (void)printArea { NSLog(@"The area of square is %f", area); } @end @interface Rectangle : Shape { CGFloat length; CGFloat breadth; } - (id)initWithLength:(CGFloat)rLength andBreadth:(CGFloat)rBreadth; @end @implementation Rectangle - (id)initWithLength:(CGFloat)rLength andBreadth:(CGFloat)rBreadth { length = rLength; breadth = rBreadth; return self; } - (void)calculateArea { area = length * breadth; } @end int main(int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; Shape *square = [[Square alloc]initWithSide:10.0]; [square calculateArea]; [square printArea]; Shape *rect = [[Rectangle alloc] initWithLength:10.0 andBreadth:5.0]; [rect calculateArea]; [rect printArea]; [pool drain]; return 0; }
Когда приведенный выше код компилируется и выполняется, он выдает следующий результат —
2013-09-22 21:21:50.785 Polymorphism[358:303] The area of square is 100.000000 2013-09-22 21:21:50.786 Polymorphism[358:303] The area is 50.000000
В приведенном выше примере на основе наличия метода calculateArea
и printArea
выполняется либо метод в базовом классе, либо в производном классе.
Полиморфизм управляет переключением методов между базовым и производным классом на основе реализации методов этих двух классов.
Полиморфизм является одной из основных концепций объектно-ориентированного программирования (ООП) и описывает ситуации, в которых что-то существует в нескольких различных формах.
В информатике он описывает концепцию, согласно которой вы можете получить доступ к объектам разных типов через один и тот же интерфейс. Каждый тип может предоставить свою независимую реализацию этого интерфейса.
Итак, полиморфизм — это идея о том, что код, который выполняется при отправке сообщения объекту, зависит как от класса получателя, так и от имени метода в сообщении. В традиционных процедурных языках код, выполняемый при вызове функции, определяется только именем функции.
Полиморфизм обеспечивает переключение методов между базовым и производным классом на основе реализации методов этих двух классов.
Основное преимущество полиморфизма заключается в упрощении интерфейса программирования. Он позволяет повторно использовать некоторые привычные именования между классами, вместо того, чтобы называть новое имя для каждой вновь добавляемой функции.
Таким образом, интерфейс программирования представляет собой набор абстрактных моделей поведения, которые отличаются от классов, реализующих интерфейс.
Objective-C поддерживает полиморфизм имен методов, но не поддерживает полиморфизм параметров и операторов.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…