Метод (программирование)
Ме́тод в объектно-ориентированном программировании — это функция или процедура, принадлежащая[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 года.