0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p><em>"Объектно-ориентированное программирование - исключительно плохая идея, которая могла родиться только в Калифорнии". Эдсгер Дейкстра</em></p>
1
<p><em>"Объектно-ориентированное программирование - исключительно плохая идея, которая могла родиться только в Калифорнии". Эдсгер Дейкстра</em></p>
2
<blockquote><p>Это перевод<a>статьи Джорджана Барроуза</a>, фронтенд-разработчика в J.P. Morgan Chase</p>
2
<blockquote><p>Это перевод<a>статьи Джорджана Барроуза</a>, фронтенд-разработчика в J.P. Morgan Chase</p>
3
</blockquote><p>Объектно-ориентированное программирование (ООП) является одной из доминирующих моделей. В колледже мне постоянно вдалбливали значение и концепции ООП. Даже на некоторых собеседованиях от меня ожидалось, что я знаю эти основы наизусть. Вот почему мы разберем этот вопрос.</p>
3
</blockquote><p>Объектно-ориентированное программирование (ООП) является одной из доминирующих моделей. В колледже мне постоянно вдалбливали значение и концепции ООП. Даже на некоторых собеседованиях от меня ожидалось, что я знаю эти основы наизусть. Вот почему мы разберем этот вопрос.</p>
4
<p>Представление этих концепций позволит познакомить новичков с важными знаниями высокого уровня, а тем, кто уже знаком - освежить эти знания в памяти.</p>
4
<p>Представление этих концепций позволит познакомить новичков с важными знаниями высокого уровня, а тем, кто уже знаком - освежить эти знания в памяти.</p>
5
<h2>Содержание</h2>
5
<h2>Содержание</h2>
6
<ul><li><a>Что такое объектно-ориентированное программирование</a></li>
6
<ul><li><a>Что такое объектно-ориентированное программирование</a></li>
7
<li><a>Абстракция</a></li>
7
<li><a>Абстракция</a></li>
8
<li><a>Инкапсуляция</a></li>
8
<li><a>Инкапсуляция</a></li>
9
<li><a>Наследование</a></li>
9
<li><a>Наследование</a></li>
10
<li><a>Полиморфизм</a></li>
10
<li><a>Полиморфизм</a></li>
11
<li><a>Вывод</a></li>
11
<li><a>Вывод</a></li>
12
</ul><h2>Что такое объектно-ориентированное программирование</h2>
12
</ul><h2>Что такое объектно-ориентированное программирование</h2>
13
<p>ООП - это модель компьютерного программирования, которая организует разработку программного обеспечения с помощью объектов и классов.</p>
13
<p>ООП - это модель компьютерного программирования, которая организует разработку программного обеспечения с помощью объектов и классов.</p>
14
<p>Объекты являются основными единицами ООП. Они могут имитировать объекты реального мира, такие как собака, стол или машина. Это означает, что они могут хранить данные и выполнять действия.</p>
14
<p>Объекты являются основными единицами ООП. Они могут имитировать объекты реального мира, такие как собака, стол или машина. Это означает, что они могут хранить данные и выполнять действия.</p>
15
<p>Данные объекта реализуются с помощью полей, а поведение реализуется с помощью методов.</p>
15
<p>Данные объекта реализуются с помощью полей, а поведение реализуется с помощью методов.</p>
16
<p>Классы - это просто схемы объекта. Они определяют состояние и поведение, которые могут вызывать объекты.</p>
16
<p>Классы - это просто схемы объекта. Они определяют состояние и поведение, которые могут вызывать объекты.</p>
17
<h2>Абстракция</h2>
17
<h2>Абстракция</h2>
18
<p>Процесс абстракции скрывает от объекта ненужные детали и показывает только существенные. Поэтому пользователю предоставляется ограниченный объем информации для взаимодействия.</p>
18
<p>Процесс абстракции скрывает от объекта ненужные детали и показывает только существенные. Поэтому пользователю предоставляется ограниченный объем информации для взаимодействия.</p>
19
<p>Например, управляя автомобилем, вы не беспокоитесь о внутренней работе двигателя или о том, как шины управляют автомобилем. Все это остается за кадром.</p>
19
<p>Например, управляя автомобилем, вы не беспокоитесь о внутренней работе двигателя или о том, как шины управляют автомобилем. Все это остается за кадром.</p>
20
<p>Вы просто взаимодействуете с основными механизмами, которые предоставляет интерфейс. Отдаете команды, которые должна выполнять машина, например, нажимаете на газ и поворачиваете руль. При этом вам все равно, как именно выполняются эти команды.</p>
20
<p>Вы просто взаимодействуете с основными механизмами, которые предоставляет интерфейс. Отдаете команды, которые должна выполнять машина, например, нажимаете на газ и поворачиваете руль. При этом вам все равно, как именно выполняются эти команды.</p>
21
<p>То же самое и в ООП. Если вы создаете переменную<strong>Airplane</strong>и вызываете его функцию для prepareForTakeoff(), вы знаете лишь, что Airplane готовится к взлету. Однако в коде могут происходить и другие вещи, такие как тестирование крыльев и запуск диагностики двигателей.</p>
21
<p>То же самое и в ООП. Если вы создаете переменную<strong>Airplane</strong>и вызываете его функцию для prepareForTakeoff(), вы знаете лишь, что Airplane готовится к взлету. Однако в коде могут происходить и другие вещи, такие как тестирование крыльев и запуск диагностики двигателей.</p>
22
<p>Абстракция достигается за счет использования абстрактных классов и интерфейсов в Java.</p>
22
<p>Абстракция достигается за счет использования абстрактных классов и интерфейсов в Java.</p>
23
<p>Абстракция == скрытая реализации</p>
23
<p>Абстракция == скрытая реализации</p>
24
<h2>Инкапсуляция</h2>
24
<h2>Инкапсуляция</h2>
25
<p>Инкапсуляция защищает данные объекта, заключая их в единый блок, что позволяет контролировать изменение и видимость. Вместо прямого доступа к данным вы должны вызвать функцию, которая изменяет или извлекает их для вас. Это создает дополнительный уровень безопасности для объекта.</p>
25
<p>Инкапсуляция защищает данные объекта, заключая их в единый блок, что позволяет контролировать изменение и видимость. Вместо прямого доступа к данным вы должны вызвать функцию, которая изменяет или извлекает их для вас. Это создает дополнительный уровень безопасности для объекта.</p>
26
<p>Например, если у вас есть объект таблицы с открытыми полями, вы сможете установить поля в любое время. Вы можете подумать, что это не имеет значения, но что если вы где-нибудь случайно установите table.legs = null? Это может сломать весь объект и приложение (поскольку это уже не таблица).</p>
26
<p>Например, если у вас есть объект таблицы с открытыми полями, вы сможете установить поля в любое время. Вы можете подумать, что это не имеет значения, но что если вы где-нибудь случайно установите table.legs = null? Это может сломать весь объект и приложение (поскольку это уже не таблица).</p>
27
<p>Однако, если вы инкапсулируете это поле в установщике setLegs(null), вы можете добавить проверку, которая игнорирует установку "legs" в значение null, тем самым укрепляя приложение.</p>
27
<p>Однако, если вы инкапсулируете это поле в установщике setLegs(null), вы можете добавить проверку, которая игнорирует установку "legs" в значение null, тем самым укрепляя приложение.</p>
28
<p>Инкапсуляция == сокрытие информации</p>
28
<p>Инкапсуляция == сокрытие информации</p>
29
<h2>Наследование</h2>
29
<h2>Наследование</h2>
30
<p>Наследование позволяет одному классу получать данные и поведение от другого класса. Основным преимуществом этого является повторное использование, которое экономит время и усилия, делая код более читабельным.</p>
30
<p>Наследование позволяет одному классу получать данные и поведение от другого класса. Основным преимуществом этого является повторное использование, которое экономит время и усилия, делая код более читабельным.</p>
31
<p>Например, класс Student и класс Teacher могут быть дочерними элементами класса Person. Ученик и Учитель наследуют поля (firstName, lastName, dateOfBirth) и методы (doWork(), goToSchool()) класса Person.</p>
31
<p>Например, класс Student и класс Teacher могут быть дочерними элементами класса Person. Ученик и Учитель наследуют поля (firstName, lastName, dateOfBirth) и методы (doWork(), goToSchool()) класса Person.</p>
32
<p>Классы Student или Teacher теперь имеют доступ к данным и методам Person. Таким образом любые объекты, которые создают копии этих двух классов, также могут вызывать их (если они общедоступны).</p>
32
<p>Классы Student или Teacher теперь имеют доступ к данным и методам Person. Таким образом любые объекты, которые создают копии этих двух классов, также могут вызывать их (если они общедоступны).</p>
33
<p>В Java наследование достигается путем "расширения" родительского класса.</p>
33
<p>В Java наследование достигается путем "расширения" родительского класса.</p>
34
<h2>Полиморфизм</h2>
34
<h2>Полиморфизм</h2>
35
<p>Честно говоря, звучит круче, чем есть на самом деле. Полиморфизм - это условие существования нескольких различных форм. В ООП полиморфизм позволяет данным или методам с одним и тем же именем означать разные вещи в разных контекстах. Но что это вообще значит?</p>
35
<p>Честно говоря, звучит круче, чем есть на самом деле. Полиморфизм - это условие существования нескольких различных форм. В ООП полиморфизм позволяет данным или методам с одним и тем же именем означать разные вещи в разных контекстах. Но что это вообще значит?</p>
36
<p>Взгляните еще раз на пример наследования. Поскольку и Ученик, и Учитель наследуют функцию doWork() от класса Person, они оба могут вызывать ее. Мы также можем предложить им реализовать собственный способ "делать работу".</p>
36
<p>Взгляните еще раз на пример наследования. Поскольку и Ученик, и Учитель наследуют функцию doWork() от класса Person, они оба могут вызывать ее. Мы также можем предложить им реализовать собственный способ "делать работу".</p>
37
<ul><li>Учитель может оценивать работы.</li>
37
<ul><li>Учитель может оценивать работы.</li>
38
<li>Студент может учиться.</li>
38
<li>Студент может учиться.</li>
39
</ul><p>Это называется переопределением метода из родительского класса. Теперь всякий раз, когда создается объект "Учитель" и вызывается функция doWork(), Учитель будет "оценивать работы". И если объект Person и вызывает doWork(), он просто "читал книгу".</p>
39
</ul><p>Это называется переопределением метода из родительского класса. Теперь всякий раз, когда создается объект "Учитель" и вызывается функция doWork(), Учитель будет "оценивать работы". И если объект Person и вызывает doWork(), он просто "читал книгу".</p>
40
<p>Другой случай, когда вы увидите полиморфизм в действии, - это перегрузка метода. Перегрузка достигается за счет изменения количества аргументов и/или изменения типа аргументов в методе.</p>
40
<p>Другой случай, когда вы увидите полиморфизм в действии, - это перегрузка метода. Перегрузка достигается за счет изменения количества аргументов и/или изменения типа аргументов в методе.</p>
41
<p>Например, в классе House у вас могут быть следующие методы:</p>
41
<p>Например, в классе House у вас могут быть следующие методы:</p>
42
<ul><li>paint()</li>
42
<ul><li>paint()</li>
43
<li>paint(String color)</li>
43
<li>paint(String color)</li>
44
<li>paint(String color1, String color2)</li>
44
<li>paint(String color1, String color2)</li>
45
<li>paint(boolean usePrimer)</li>
45
<li>paint(boolean usePrimer)</li>
46
</ul><h2>Вывод</h2>
46
</ul><h2>Вывод</h2>
47
<p>Объяснения этих четырех понятий очень общие, потому что я хотел сделать их понятными для самого широкого круга читателей. Оставьте комментарий ниже с любыми другими примерами и словами по этим темам или ООП в целом. Спасибо!</p>
47
<p>Объяснения этих четырех понятий очень общие, потому что я хотел сделать их понятными для самого широкого круга читателей. Оставьте комментарий ниже с любыми другими примерами и словами по этим темам или ООП в целом. Спасибо!</p>