HTML Diff
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>