Найти в Дзене
Войти в IT

Что такое классы в программировании? Магия ООП простыми словами.

Оглавление

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

Подобному тому, как человек не может обойтись без скелета и мышц, объектно-ориентированное программирование не обходится без классов и методов (но конечно не ограничиваясь только ими). Понимание концепции классов и умелая работа с ними, позволяет быстро создавать очень красивые программы. Концепция классов помогает смотреть на задачи последовательно, и работать над ними "шаг за шагом".

Недавно я приводил статистику языков по количеству вакансий в 2022 году. Так вот, на сегодняшний день порядка 80% вакансий в сфере программирования ориентированы на языки, поддерживающие и активно применяющие парадигму ООП. То есть, если мы хотим решать коммерческие задачи прямо сейчас, нам надо понять что это за концепция, и научиться её применять.

Объект как ядро концепции ООП

Напомню, что парадигма ООП смотрит на решение любых задач через «объекты». С этой точки зрения, всё вокруг нас является объектами. Человек, собака, дядя Петя, дверь, бобр на речке, плотина которую строит бобр, охотник на бобра и что угодно прочее.

При этом, объект может содержать в себе и другие объекты. Например, в холодильнике лежат пельмени. Холодильник это объект. Пачка с пельменями это объект. И каждый пельмень в пачке это тоже объект. У каждого из объектов есть свои свойства и своё предназначение. Так вот, если объектом в ООП называется нечто «материализованное» (в реальности выполняющее некоторые конкретные функции), то классом называется условная схема (чертёж) этого объекта.

Магия ООП в состоит том, чтобы опираться на классы как на кирпичики, создавая из них сложные конструкции для решения задач. Прямо как в Lego. С точки зрения объектно-ориентированного программирования, специалист сначала "разбирает" задачу на составные части, и анализирует её. Потом специалист создаёт набор классов, и обучает их взаимодействию друг с другом. Созданные классы собираются в единую программу, подобно тому как из кирпичей строится жилой дом.

Концепция объектов на примере фабрики

Давай представим, что у нас есть пельменная фабрика. Где-то в её недрах мы храним книгу рецептов. На какой-то там странице этой книги, написан рецепт изготовления пельменя. Там подробно рассказано что такое пельмень, из чего он состоит, и как его нужно лепить. С точки зрения объектно-ориентированного программирования, такое описание является классом.

Используя рецепт приготовления пельменя, мы можем создать множество пельменей. Они будут очень похожи друг на друга, но будут так же немного разными по природе материалов, и независимыми друг от друга. Пельмень №1 мы можем сварить, а пельмень №45 выкинуть в окно. При этом (не беря в расчёты квантовую запутанность), летящий в окне пельмень не будет влиять на пельмень в кастрюле. Это разные пельмени, хотя и одинаковые по своей природе, и идентично похожие по свойствам.

Философствуя на эту тему дальше, скажу ещё что пельмень №1 может храниться независимо от пельменя №45. И конечно, внешние объекты могут так же влиять на эти пельмени независимо друг от друга. С точки зрения "стандарта", любой внешний наблюдатель определённо скажет что это одинаковые пельмени, сделанные по одинаковому рецепту. И если рецепт будет условным "стандартом" пельменя, то конкретные пельмени, с учётом соответствуя этому стандарту, и оставаясь достаточно конкретны, всё-таки могут иметь отличия друг от друга.

В чём же разница между классом и объектом?

Так вот, в объектно-ориентированном программировании, классом называется нематериальная схема (чертёж) объекта. А объектом называется уже конкретный экземпляр, созданный по этой схеме.

Класс сам по себе не является материальным, и присутствует в программе с описательной точки зрения. В нём указываются все свойства объекта, его методы (функции), внутренняя логика и всё остальное прочее. Кстати говоря, переменные (если они нужны для конкретного класса), так же перечисляются внутри класса. Классы можно так же разнести по файлам внутри программы, что достаточно удобно для организации больших программ.

С объектами всё наоборот. Объекты, которые созданы по схеме класса, очень даже материальны. Они похожи друг на друга, но независимы друг от друга. Под каждый объект выделяется конкретная физическая область памяти в ОЗУ — то есть, конкретные диапазоны ячеек в микросхемах.

Когда программа выполняется, то в какой-то момент объекты "создаются". То есть, специальная команда просит компьютер выделить место в оперативной памяти, и далее записывает туда новый "объект", созданный по некоторому чертежу. Чертёж остается на месте. А вот в ячейках памяти появляется новый объект (или несколько объектов).

Когда программа завершается, то происходит очистка памяти, и созданные объекты удаляются из её ячеек. То есть, классы присутствуют в программе всегда - с момента её создания программистом, и представляют из себя программный код в разных файлах. Объекты же создаются, обрабатываются и уничтожаются только во время выполнения программы.

Как описать класс в стиле ООП?

Для описания классов в объектно-ориентированных языках, используют слово class. Для создания объектов на основе класса используют оператор new.

Что именно будет содержать в себе класс, и какие задачи он будет выполнять — целиком и полностью ложится на видение программиста. Не столь важно, как именно будет называться каждый класс и какую именно часть логики он будет в себе содержать. Гораздо важнее декомпозировать задачу на составляющие таким образом, чтобы совокупность классов упрощала решение задачи, и делала программу простой и понятно, внутри и снаружи. Но в целом, есть так же негласный принцип - называть классы нужно таким образом, чтобы было понятно, какие задачи они решают.

Давай опишем класс «Программист». И поместим туда две переменные: "Возраст" (Age) и "Имя" (Name). Это будет простой класс с двумя переменными, и пока без методов.

class Programmer
{
int Age;
string Name;
}

А теперь создадим на его основе это класса объект:

Programmer firstProgrammer = new Programmer();
firstProgrammer.Age = 33;
firstProgrammer.Name = "Василий";

И ещё давай создадим нашему программисту друга.

Programmer friend = new Programmer();
friend.Age = 28;
friend.Name = "Друг Василия";

Теперь, где-то в памяти нашего компьютера, существуют два объекта класса Programmer. И мы можем работать с ними, не зависимо друг от друга, и не влияя на сам класс. Это и есть пример простейшего применения парадигмы объектно-ориентированного программирования.

Популярность ООП в современном мире

Большинство современных программ написано в стиле ООП. Если заглянуть «под капот» сайтов вроде Яндекса или ВКонтакте, Кинопоиска или Госуслуг, то мы обнаружим там высокоуровневые языки с применением ООП (как минимум в одном из первых слоёв инфраструктуры).

Эта парадигма позволяет упрощать решение задач, и разбивать программу на модули. С точки зрения командной работы, это практичный подход. Одной команде программистов предлагают написать логику работы для сущности "двигатель", а вторая команда работает над сущностью "кузов". Когда работы завершаются, кузов и двигатель соединяются, и получается автомобиль.

Но давай не будем идеализировать. ООП не является "волшебной пулей", которая единым образом решает любые проблемы. Есть и другие востребованные и важные парадигмы, которые следует знать. И конечно, в ООП есть свои недостатки. Но! Это одна из основ современных информационных технологий. Это та обязательная концепция, изучение которой нужно для формирования целостной картины IT-технологий.

Поэтому, последовательное изучение и понимание парадигмы объектно-ориентированного программирования в общем, и классов в частности, эффективно приближает тебя к коммерческим заказам и реальным задачам. Такие дела.

#программист #it #itтехнологии #обучениепрограммированию #информационныетехнологии #айтишник #программирование #программированиеснуля #программированиедляначинающих #языкпрограммирования #обучение #технологии #образование #студенты #ооп

🔥 Понравилось? Подпишись! Победим восстание роботов вместе! 🔥

-2

🚀 P.S. Ты можешь круто поддержать меня и проект "Войти в IT" на boosty! Я публикую там более эксклюзивный и профессиональный, иногда немного личный контент. Хочешь посмотреть как я выгляжу в реальной жизни? Тогда жми: Ссылка 🚀

P.S.2 У меня ещё есть Telegram-канал. Там посты чуть попроще, и чуть повеселей. Ссылка