Об объектах и ООП простыми словами

Денис написал: «Похоже лексика и примеры приведенные Вами, для людей имеющих серьезную теоретическую и практическую подготовку в программировании.Мне, увы, в них ничего не понятно. Можно ли объяснить по простому,по бытовому, для людей только начинающих свой путь в программировании?»

Что ж, попробую:

1. Первые программы были написаны с использованием машинных команд (причем у каждого типа ЭВМ — свои). Переход программиста на другой тип ЭВМ требовал прежде всего изучения системы команд этого типа ЭВМ. То есть человек должен был говорить на языке конкретной ЭВМ, понимать, как она работает. Например, были одно-, двух- и трехадресные машины. Для последней при сложении двух чисел требовалось указать код операции, адрес 1 числа, адрес 2 числа и адрес ячейки результата. Это та еще работа была, знаю по себе.

2. Потом появился язык низкоуровнего (в смысле близости его к машинным командам) программирования Ассемблер, где код операции задавался набором символов (ADD — сложение, MUL — умножение и т.п.), а вместо конкретных адресов хранения можно было использовать идентификаторы переменных и констант. Для каждого типа ЭВМ были написаны компиляторы с Ассемблера в машинные коды, что позволило обмениваться программами, реализующими конкретные алгоритмы (чаще вычислительные). Уже стало чуточку проще без привязки к конкретной ЭВМ, но все равно приходилось думать «как машина».

3. В 50-х годах прошлого века появились высокоуровневые языки: Алгол, Фортран и Кобол. Были написаны трансляторы с этих языков, вследствие чего для значительной части программистов стало не принципиальным знать устройство ЭВМ, систему команд и прочие премудрости, к тому же были написаны библиотеки стандартных подпрограмм (БСП), расширявшие возможности языка программирования. Наиболее близок к английскому языку был язык Кобол, созданный специально для экономических расчетов. То есть первоначальное назначение языков — сократить семантический разрыв (семантика = смысл) в общении человека и компьютера. Как сейчас в Яндексе, когда мы спрашиваем Алису о погоде или о чем то другом.

4. Но все-таки следующие языки, как Бейсик, Паскаль, С (читаем — Си) жили по своим правилам процедурного (императивного) программирования. Каждая переменная должна быть объявлена (ей должно быть зарезервировано место в оперативной памяти). А алгоритм обработки данных создавался, руководствуясь принципами структурного программирования. А действия можно было определять только через определенные конструкции языка: операторы присваивания, условия, цикла, вызова процедуры.

5. Существенно стало менять программирование с появлением языка C++ (его предшественник — язык Simula). Его первый коммерческий выпуск состоялся в октябре 1985 года. Язык С++ позиционируется как универсальный язык программирования, основанный на понятиях объектов. Ну а про C# Вы знаете, это еще одна ветка языка C++.

6. Что же такое объект, спросите Вы? Подумаем, как человек мыслит, разве не в объектах? Вы общаетесь с товарищами по школе, вузу или работе, для Вас они объекты общения. Они имеют общие свойства (возраст, пол, образование, интеллект), но их количественное значение может быть различным. Такие объекты можно объединять в некоторую общность — класс. Примеры: сотрудники отдела продаж, студенты одной группы вуза, школьники 10Б класса. Когда Вы покупаете фрукты, перед Вами — выбор и классов (вид фрукта) и объектов (экземпляров конкретного фрукта). Фраза: «Купите 2 килограмма крупных и ярких апельсинов» содержит в себе и указание класса («апельсины»), и указание их свойств («крупные» и «яркие по цвету»).

7. Но у объектов есть не только свойства, но и могут быть и действия (например, реакции на некоторые события). Через эти действия объекты взаимодействуют друг с другом. Пример из программирования Windows-приложений: если Вы нажмете кнопку «Закрыть окно»(событие), то приложение будет закрыто (действие). Теперь, если мы объединим свойства (характеристики) и действия в одну оболочку (назовем ее «классом»), то такая операция называется «инкапсуляцией» (спрятать все в одну капсулу). По сути класс — это некоторый шаблон для создания объектов с одинаковым набором свойств и действий.

8. Наследование присуще некоторым группам объектов. Дети наследуют свойства родителей, растения дают семена, из которых потом вырастают те же растения, наука развивается за счет углубления и уточнения знаний о своем предмете исследований. В программировании наследование  устроено даже гораздо проще. Есть один (не будем пока рассматривать множественное наследование, как в C++) родительский класс, от которого наследуется класс-потомок (дочерний класс), к которому затем добавляются новые свойства и действия. Говорят, что класс-потомок всегда «богаче» родительского класса — в нем есть все, что у родителя, плюс что-то еще.

9. И, наконец, полиморфизм -> «множество форм». Оказалось удобным называть методы родительского и дочерних классов одним именем, но при этом эти методы могут выполнять и разные (в деталях) действия. Например, в классе Form есть метод Close() — закрыть окно. В дочернем классе Form1 Вы можете добавить к этому действию, например, сохранение каких-то Ваших данных в файле.  Тогда при закрытии окна будет выполнено и еще одно действие. Обратите внимание на имена методов используемых Вами классов, они часто называются одинаково, но выполняют разный объем действий, необходимых для объектов родственных классов.

10. Полиморфизм возможен в и рамках одного класса, это достигается перегрузкой методов. В любом классе может существовать несколько методов с одинаковым именем, но с различным типом возвращаемого значения и/или списка параметров.

 

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Пролистать наверх