~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ FB2D5C8672C8CDD2B81822E841F32F10__1716130800 ✰
Заголовок документа оригинал.:
✰ Method (computer programming) - Wikipedia ✰
Заголовок документа перевод.:
✰ Метод (компьютерное программирование) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Method_(computer_programming) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/fb/10/fb2d5c8672c8cdd2b81822e841f32f10.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/fb/10/fb2d5c8672c8cdd2b81822e841f32f10__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 09:49:15 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 19 May 2024, at 18:00 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Метод (компьютерное программирование) — Википедия Jump to content

Метод (компьютерное программирование)

Из Википедии, бесплатной энциклопедии

Метод , в объектно-ориентированном программировании (ООП) — это процедура связанная с объектом и, как правило, также с сообщением . Объект состоит из данных о состоянии и поведения ; они составляют интерфейс , который определяет, как можно использовать объект. Метод — это поведение объекта, параметризованное пользователем.

Данные представлены как свойства объекта, а поведение — как методы. Например, Window объект может иметь такие методы, как open и close, а его состояние (независимо от того, открыто оно или закрыто в любой момент времени) будет свойством.

В программировании на основе классов методы определяются внутри класса , а объекты являются экземплярами данного класса. Одной из наиболее важных возможностей, предоставляемых методом, является переопределение метода с тем же именем (например, area) можно использовать для нескольких разных типов классов. Это позволяет объектам-отправителям вызывать поведение и делегировать реализацию этого поведения принимающему объекту. Метод в программировании на Java задает поведение объекта класса. Например, объект может отправить area сообщение другому объекту и вызывается соответствующая формула, независимо от того, является ли принимающий объект rectangle, circle, triangle, и т. д.

Методы также предоставляют интерфейс, который другие классы используют для доступа и изменения свойств объекта; это известно как инкапсуляция . Инкапсуляция и переопределение — две основные отличительные особенности между вызовами методов и процедур. [1]

Переопределение и перегрузка [ править ]

метода Переопределение и перегрузка — два наиболее важных отличия метода от обычного вызова процедуры или функции. Переопределение относится к подклассу, переопределяющему реализацию метода своего суперкласса. Например, findArea может быть методом, определенным в классе формы, [2] triangleи т. д. каждый будет определять соответствующую формулу для расчета своей площади. Идея состоит в том, чтобы рассматривать объекты как «черные ящики», чтобы изменения во внутренней части объекта можно было вносить с минимальным влиянием на другие объекты, которые его используют. Это называется инкапсуляцией и предназначено для упрощения поддержки и повторного использования кода.

С другой стороны, перегрузка метода относится к дифференциации кода, используемого для обработки сообщения, на основе параметров метода. Если рассматривать принимающий объект как первый параметр в любом методе, то переопределение — это всего лишь частный случай перегрузки, когда выбор основан только на первом аргументе. Следующий простой пример Java иллюстрирует разницу:

Методы доступа, мутатора и менеджера [ править ]

Методы доступа используются для чтения значений данных объекта. Методы-мутаторы используются для изменения данных объекта. Методы менеджера используются для инициализации и уничтожения объектов класса, например конструкторов и деструкторов.

Эти методы обеспечивают уровень абстракции , который облегчает инкапсуляцию и модульность . Например, если класс банковского счета предоставляет getBalance()метод доступа для получения текущего баланса (вместо прямого доступа к полям данных баланса), тогда более поздние версии того же кода могут реализовать более сложный механизм получения баланса (например, выборку из базы данных ) без необходимости изменения зависимого кода . Концепции инкапсуляции и модульности не являются уникальными для объектно-ориентированного программирования. Действительно, во многих отношениях объектно-ориентированный подход является просто логическим расширением предыдущих парадигм, таких как абстрактные типы данных и структурированное программирование . [3]

Конструкторы [ править ]

Конструктор конструкцией — это метод, который вызывается в начале жизни объекта для создания и инициализации объекта. Этот процесс называется ( или созданием экземпляра ). Инициализация может включать в себя приобретение ресурсов. Конструкторы могут иметь параметры, но в большинстве языков обычно не возвращают значения. См. следующий пример на Java:

общественный   класс   Main   { 
     String   _name  ; 
      интервал   _ролл  ; 

      Main  (  String   name  ,   introll   )  //   {   метод конструктора 
         this  .   _имя   =   имя  ; 
          этот  .   _roll   =   рулон  ; 
      } 
 } 

Деструктор [ править ]

Деструктор называемый — это метод, который вызывается автоматически в конце жизни объекта, процесс, Destruction . Уничтожение в большинстве языков не допускает аргументов метода деструктора и возвращаемых значений. Деструкторы могут быть реализованы для выполнения работ по очистке и других задач при уничтожении объекта.

Финализаторы [ править ]

В языках со сборкой мусора , таких как Java , [4] : 26, 29  С# , [5] : 208–209  и Python деструкторы известны как финализаторы . Их цель и функции аналогичны деструкторам, но из-за различий между языками, использующими сборку мусора, и языками с ручным управлением памятью, последовательность их вызова различна.

Абстрактные методы [ править ]

Абстрактный метод — это метод, имеющий только сигнатуру и не имеющий тела реализации . Его часто используют для указания того, что подкласс должен предоставлять реализацию метода, как в абстрактном классе . Абстрактные методы используются для указания интерфейсов в некоторых языках программирования. [6]

Пример [ править ]

Следующий код Java показывает абстрактный класс, который необходимо расширить:

абстрактный   класс   Shape   { 
     абстрактная   int   область  (  int   h  ,   int   w  );    // сигнатура абстрактного метода 
 } 

Следующий подкласс расширяет основной класс:

общественный   класс   Rectangle   расширяет   форму   { 
     @Override 
     int   area  (  int   h  ,   int   w  )   { 
         return   h   *   w  ; 
      } 
 } 

Реабстракция [ править ]

Если подкласс предоставляет реализацию абстрактного метода, другой подкласс может снова сделать его абстрактным. Это называется реабстракция .

На практике это используется редко.

Пример [ править ]

В C# виртуальный метод можно переопределить абстрактным методом. (Это также относится к Java, где все неприватные методы являются виртуальными.)

класс   IA 
 { 
     общественный   виртуальный   недействительный   M  ()   {   } 
 } 
 абстрактный   класс   IB   :   IA 
 { 
     общественный   переопределенный   абстрактный   недействительный   M  ();    // допустимый 
 } 

Методы интерфейсов по умолчанию также могут быть повторно абстрагированы, что потребует создания подклассов для их реализации. (Это также относится к Java.)

интерфейс   IA 
 { 
     void   M  ()   {   } 
 } 
 интерфейс   IB   :   IA 
 { 
     абстрактный   void   IA  .   М  (); 
  } 
 class   C   :   IB   {   }   // ошибка: класс C не реализует IA.M. 

Методы класса [ править ]

Методы класса — это методы, которые вызываются в классе , а не в экземпляре. объекта Обычно они используются как часть метамодели . Т.е. для каждого определенного класса создается экземпляр объекта класса в метамодели. Протоколы метамодели позволяют создавать и удалять классы. В этом смысле они предоставляют ту же функциональность, что и описанные выше конструкторы и деструкторы. Но в некоторых языках, таких как Common Lisp Object System (CLOS), метамодель позволяет разработчику динамически изменять объектную модель во время выполнения: например, создавать новые классы, переопределять иерархию классов, изменять свойства и т. д.

Специальные методы [ править ]

Специальные методы очень специфичны для языка, и язык может поддерживать ни один, некоторые или все специальные методы, определенные здесь. Компилятор языка может автоматически генерировать специальные методы по умолчанию, или программисту может быть разрешено опционально определять специальные методы. Большинство специальных методов не могут быть вызваны напрямую, вместо этого компилятор генерирует код для их вызова в подходящее время.

Статические методы [ править ]

Статические методы предназначены для применения ко всем экземплярам класса, а не к какому-либо конкретному экземпляру. они похожи на статические переменные В этом смысле . Примером может служить статический метод для суммирования значений всех переменных каждого экземпляра класса. Например, если бы существовал Product class, он может иметь статический метод для вычисления средней цены всех продуктов.

Статический метод можно вызвать, даже если экземпляры класса еще не существуют. Статические методы называются «статическими», поскольку они разрешаются во время компиляции в зависимости от класса, из которого они вызваны, а не динамически, как в случае с методами экземпляра, которые разрешаются полиморфно в зависимости от типа объекта во время выполнения.

Примеры [ править ]

На Java [ править ]

В Java обычно используемый статический метод:

Math.max(двойной а, двойной б)
 

Этот статический метод не имеет объекта-владельца и не запускается в экземпляре. Он получает всю информацию из своих аргументов. [2]

Операторы копирования-присваивания [ править ]

Операторы копирования-присваивания определяют действия, которые должен выполнить компилятор, когда объект класса присваивается объекту класса того же типа.

Методы оператора [ править ]

Методы оператора определяют или переопределяют символы оператора и определяют операции, которые необходимо выполнить с символом и связанными с ним параметрами метода. Пример С++:

#include   <string> 

 class   Data   { 
  public  : 
   booloperator   <  (  const   Data  &   data  )   const   {   returnroll_    <   data  .   рулон_  ;    } 
   Booloperator   ==  (  const   Data  &   data  )   const   { 
     return   name_   ==   data  .   name_   &&   roll_   ==   данные  .   рулон_  ; 
    } 

  Private  : 
   std  ::  string   name_  ; 
    introll_   ; 
  }; 

Функции-члены в C++ [ править ]

Некоторые процедурные языки были расширены объектно-ориентированными возможностями, чтобы использовать большие наборы навыков и устаревший код для этих языков, но при этом обеспечивать преимущества объектно-ориентированной разработки. Пожалуй, самым известным примером является C++ , объектно-ориентированное расширение языка C. программирования Из-за требований к проектированию, требующих добавления объектно-ориентированной парадигмы к существующему процедурному языку, передача сообщений в C++ имеет некоторые уникальные возможности и терминологию. Например, в C++ метод известен как функция-член . В C++ также есть концепция виртуальных функций , которые являются функциями-членами, которые могут быть переопределены в производных классах и допускают динамическую отправку .

Виртуальные функции [ править ]

Виртуальные функции — это средства, с помощью которых класс C++ может добиться полиморфного поведения. Невиртуальные функции-члены , или обычные методы , — это те, которые не участвуют в полиморфизме .

Пример С++:

#include   <iostream> 
 #include   <memory> 

 class   Super   { 
  public  : 
   virtual   ~  Super  ()   =   default  ; 

    virtual   void   IAm  ()   {   std  ::  cout   <<   "Я суперкласс!  \n  "  ;    } 
 }; 

  class   Sub   :   public   Super   { 
  public  : 
   void   IAm  ()   override   {   std  ::  cout   <<   "Я подкласс!  \n  "  ;    } 
 }; 

  int   main  ()   { 
   std  ::  unique_ptr  <  Super  >   inst1   =   std  ::  make_unique  <  Super  >  (); 
    std  ::  unique_ptr  <  Super  >   inst2   =   std  ::  make_unique  <  Sub  >  (); 

    inst1  ->  IAm  ();     // Вызовы |Super::IAm|. 
    inst2  ->  IAm  ();     // Вызов |Sub::IAm|. 
  } 

См. также [ править ]

Примечания [ править ]

  1. ^ «Что такое объект?» . oracle.com . Корпорация Оракл . Проверено 13 декабря 2013 г.
  2. ^ Перейти обратно: а б Мартин, Роберт С. (2009). Чистый код: Справочник по гибкому программному обеспечению . Прентис Холл. п. 296. ИСБН  978-0-13-235088-4 .
  3. ^ Мейер, Бертран (1988). Объектно-ориентированное построение программного обеспечения . Кембридж: Международная серия Прентис Холл по информатике. стр. 52–54. ISBN  0-13-629049-3 .
  4. ^ Блох, Джошуа (2018). «Эффективная Java: Руководство по языку программирования» (третье изд.). Аддисон-Уэсли. ISBN  978-0134685991 .
  5. ^ Альбахари, Джозеф. C# 10 в двух словах О'Рейли. ISBN  978-1-098-12195-2 .
  6. ^ «Абстрактные методы и классы» . oracle.com . Документация Oracle Java . Проверено 11 декабря 2014 г.

Ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: FB2D5C8672C8CDD2B81822E841F32F10__1716130800
URL1:https://en.wikipedia.org/wiki/Method_(computer_programming)
Заголовок, (Title) документа по адресу, URL1:
Method (computer programming) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)