Метод (программирование)
Ме́тод в объектно-ориентированном программировании — это функция или процедура, принадлежащая[1] какому-то классу или объекту.
Как и процедура в процедурном программировании, метод состоит из некоторого количества операторов для выполнения какого-то действия и имеет набор входных аргументов.
Различают простые методы и статические методы (методы класса):
- простые методы имеют доступ к данным объекта (конкретного экземпляра данного класса),
- статические методы не имеют доступа к данным объекта, и для их использования не нужно создавать экземпляры (данного класса).
Методы предоставляют интерфейс, при помощи которого осуществляется доступ к данным объекта некоторого класса, тем самым, обеспечивая инкапсуляцию данных.
В зависимости от того, какой уровень доступа предоставляет тот или иной метод, выделяют:
- открытый (
public
) интерфейс — общий интерфейс для всех пользователей данного класса; - защищённый (
protected
) интерфейс — внутренний интерфейс для всех наследников данного класса; - закрытый (
private
) интерфейс — интерфейс, доступный только изнутри данного класса.
Такое разделение интерфейсов позволяет сохранять неизменным открытый интерфейс, но изменять внутреннюю реализацию.
Конструкторы
[править | править код]Конструктор — это метод, вызываемый в начале жизненного цикла объекта для создания и инициализации объекта. Конструкторы могут иметь параметры, но обычно не возвращают значения в большинстве языков. См. следующий пример на Java:
public class Main { String _name; int _roll; Main(String name, int roll) { // метод конструктора this._name = name; this._roll = roll; } }
Абстрактные методы
[править | править код]Абстрактный метод имеет только сигнатуру и не имеет тела реализации. Он часто используется, чтобы указать, что подкласс должен обеспечить реализацию метода. Абстрактные методы используются для указания интерфейсов в некоторых языках программирования.[2]
Пример
[править | править код]Следующий код Java показывает абстрактный класс, который необходимо расширить:
abstract class Shape { abstract int area(int h, int w); // сигнатура абстрактного метода }
Следующий подкласс расширяет основной класс:
public class Rectangle extends Shape { @Override int area(int h, int w) { return h * w; } }
Реабстракция
[править | править код]Если подкласс обеспечивает реализацию абстрактного метода, другой подкласс может снова сделать его абстрактным. Это называется реабстракцией.
На практике это используется редко.
Пример
[править | править код]В C#, виртуальный метод можно переопределить абстрактным методом. (Это также относится к Java, где все незащищенные методы являются виртуальными.)
class IA { public virtual void M() { } } abstract class IB : IA { public override abstract void M(); // разрешено }
Методы интерфейсов по умолчанию также могут быть реабстрагированы, требуя подклассов для их реализации. (Это также относится к Java.)
interface IA { void M() { } } interface IB : IA { abstract void IA.M(); } class C : IB { } // ошибка: класс 'C' не реализует 'IA.M'.
См. также
[править | править код]Примечания
[править | править код]- ↑ Под принадлежностью подразумевается, что метод явно ассоциирован с обработкой определённого класса объектов. Теоретически, метод предназначен для обработки ассоциированного с ним типа, но фактически это необязательно.
- ↑ Abstract Methods and Classes . oracle.com. Oracle Java Documentation. Дата обращения: 11 декабря 2014. Архивировано 1 июня 2020 года.
Это заготовка статьи о компьютерных языках. Помогите Википедии, дополнив её. |
В статье не хватает ссылок на источники (см. рекомендации по поиску). |