Просто о сложном: что такое объектно-ориентированное программирование (ооп)?

Описание формата внутреннего представления данных 1С в контексте обмена данными

Фирма 1С не рекомендует использовать внутреннее представление данных для любых целей, которые отличны от обмена с 1С:Предприятием 7.7. Но сама возможность заглянуть на «внутреннюю кухню» платформы с помощью функций ЗначениеВСтрокуВнутр(), ЗначениеВФайл(), ЗначениеИзСтрокиВнутр() и ЗначениеИзФайла(), дала возможность сообществу программистов 1С разработать новые приемы разработки и анализа.

Так, именно на использовании внутреннего представления был построен алгоритм «быстрого массива», который позволяет практически мгновенно создать массив в памяти на основании строки с разделителями. С помощью разбора внутреннего представления можно «на лету» программным кодом выполнить анализ обычной формы и даже сделать редактор графической схемы. Во внутреннем формате сохраняют свои данные между сеансами различные популярные внешние обработки. А еще это возможность сделать быстрый обмен с внешними системами.

1 стартмани

Расширенные концепции ООП в Java

Инкапсуляция

Инкапсуляция — это метод в ООП, который используется для сокрытия данных. Думайте об инкапсуляции как о защитной оболочке, которая предотвращает доступ к данным для любого кода за пределами своего класса.

Этого можно достичь, объявив переменные в классе как частные и объявив общедоступные методы для получения и установки значений переменных.

Инкапсуляция позволяет классам полностью контролировать то, что хранится в их полях. Это также увеличивает гибкость, поскольку мы можем решить, какие переменные имеют права чтения / записи.

Хорошим примером инкапсуляции может быть реализация авторизации. Поля имени пользователя и пароля будут объявлены как закрытые. Для этих данных будут реализованы общедоступные методы.

Упрощённо: поля, содержащие данные, являются частными, а общедоступные методы предоставляют интерфейс для доступа к этим полям.

Наследование в Java

Наследование — важный принцип в ООП. В Java наследование — это механизм, в котором дочерний класс наследует атрибуты родительского класса.

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

Наследование поддерживает возможность повторного использования, что очень важно в объектно-ориентированном программировании. Это может помочь нам обновить определённые части нашего Java-кода без изменения его основных атрибутов

This Ключевое слово в Java используется для обозначения экземпляра текущего класса.

Подобным образом super ключевое слово в Java используется для ссылки на члены суперкласса изнутри непосредственного подкласса.

Полиморфизм в Java

Полиморфизм — это функция ООП, которая позволяет различать сущности с одинаковыми именами. Это позволяет нам выполнять одно действие разными способами. Полиморфизм используется в Java, потому что он помогает нам повторно использовать код. Одна переменная может использоваться для хранения нескольких типов данных.

Упрощённо: полиморфизм относится к одному и тому же объекту, проявляющему разные формы и поведение.

Хорошим примером может быть класс, в Shape котором есть getArea() метод для поиска области различных форм. У класса Shape будет только один общедоступный метод getArea().

Тогда у нас могут быть классы, расширяющие этот Shape класс, например, Rectangle и Circle классы. Каждый класс будет реализовывать getArea() метод по-разному. Давайте посмотрим, как это будет выглядеть с помощью следующего кода:

В ООП есть два типа полиморфизма. Полиморфизм, который разрешается во время компиляции, известен как статический полиморфизм. Перегрузка метода — прекрасный пример статического полиморфизма.

С другой стороны, динамический полиморфизм разрешается во время выполнения. Переопределение метода используется в динамическом полиморфизме. Он включает в себя переопределение метода родительского класса в подклассе.

Это позволяет дочернему классу передать свою реализацию методу, предоставленному родительским классом. Затем метод родительского класса называется замещающим методом, а методы дочерних классов будут называться замещающими методами.

Понятие «объект» в ООП

Сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса (например, после запуска результатов компиляции и связывания исходного кода на выполнение).

Объект — это появляющийся при создании экземпляра класса набор свойств и их значений в памяти,  на которые можно сослаться с помощью идентификатора:

  • каждое свойство состоит из имени и значения, ассоциированного с этим именем;
  • значением свойства может быть функция, которую можно назвать методом объекта. 

Свойства объекта в JavaScript

В JavaScript объект имеет свойства, ассоциированные с ним. Свойство объекта:

  • можно понимать как переменную, закрепленную за объектом;
  • определяют характеристики объекта.

Получение доступа к свойству объекта:

JavaScript

objectName.propertyName
// или
objectName

1
2
3

objectName.propertyName

// или

objectName»propertyName»

Примеры:

JavaScript

var myCar = new Object(); // создание объекта с помощью конструктора
myCar.make = «Ford»;
myCar.model = «Mustang»;
myCar.year = 1969;

// или
myCar = «Ford»;
myCar = «Mustang»;
myCar = 1969;

1
2
3
4
5
6
7
8
9

varmyCar=newObject();// создание объекта с помощью конструктора

myCar.make=»Ford»;

myCar.model=»Mustang»;

myCar.year=1969;

 
// или

myCar»make»=»Ford»;

myCar»model»=»Mustang»;

myCar»year»=1969;

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

Примеры

JavaScript

var myObj = new Object(),
str = «myString»,
rand = Math.random(),
obj = new Object();

myObj.type = «Dot syntax»;
myObj = «String with space»;
myObj = «String value»;
myObj = «Random Number»;
myObj = «Object»;
myObj = «Even an empty string»;

console.log(myObj);

1
2
3
4
5
6
7
8
9
10
11
12
13

varmyObj=newObject(),

str=»myString»,

rand=Math.random(),

obj=newObject();

myObj.type=»Dot syntax»;

myObj»date created»=»String with space»;

myObjstr=»String value»;

myObjrand=»Random Number»;

myObjobj=»Object»;

myObj»»=»Even an empty string»;

console.log(myObj);

Обратите внимание, что все ключи с квадратными скобками преобразуются в тип String, поскольку объекты в JavaScript могут иметь в качестве ключа только тип String. Например, в приведенном выше коде, когда ключ obj добавляется в myObj, JavaScript вызывает метод obj.toString () и использует эту результирующую строку в качестве нового ключа

Принципы ООП

Главные принципы в ООП – абстрагирование, инкапсуляция, наследование и полиморфизм.

Абстрагирование (абстракция) – это выделение и представление существенных отличительных признаков, свойств, характеристик в терминах программирования.

Инкапсуляция – это «размещение в оболочке, капсуле», механизм объединения данных в единый компонент, дающий возможность защитить и спрятать их. То есть ограничить доступ одних компонентов программы к другим. Инкапсуляция позволяет над каждой частью программы работать изолированно. Это такая мантия-невидимка Гарри Поттера.

Наследование – это как в биологии схожесть детей, родителей и предков: передача свойств от одного объекта или класса другому, имеющему, помимо того, и собственные свойства. Похоже на смартфоны нового поколения: могут добавить камеры получше, но в целом наследуется то, чем мы уже пользуемся. Есть родительские/базовые классы и классы-потомки/наследники.

Полиморфизм: одно имя метода для класса – много внешне схожих, но технических различных действий, соответствующих особенностям наследников. Лаконичное определение: один интерфейс – множество реализаций.

Работа со схемой запроса Промо

Стандартом взаимодействия с реляционной базой данных стал язык SQL. Приемником SQL в 1С является язык запросов. Язык запросов, также как и SQL, является структурированным. Составляющие структуры запроса отвечают на разные вопросы о том, какие данные требуется получить и какие манипуляции с множествами данных необходимо произвести при получении. В простых случаях текст запроса можно написать вручную, однако в сложных случаях, а также при программном формировании, — лучше воспользоваться объектной моделью запроса и использовать объект «Схема запроса». В статье дается описание объектной модели и особенностей работы с ней, а также приводится решение, упрощающее взаимодействие с объектом «Схема запроса».

1 стартмани

Абстракция

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

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

Для использования класса Car вам не нужно понимать, как там все устроено изнутри. Точно так же и водителю автомобиля необязательно знать, как работает двигатель.

Роль полиморфизма

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

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

Рассмотрим для примера стек, т.е. область памяти, функционирующую по принципу «последним
пришел — первым обслужен». Допустим, что в программе требуются три разных типа
стеков: один — для целых значений, другой — для значений с плавающей точкой, третий — для символьных значений. В данном примере алгоритм, реализующий все эти
стеки, остается неизменным, несмотря на то, что в них сохраняются разнотипные данные. В языке, не являющемся объектно-ориентированным, для этой цели пришлось бы
создать три разных набора стековых подпрограмм с разными именами. Но благодаря
полиморфизму для реализации всех трех типов стеков в C# достаточно создать лишь один общий набор подпрограмм. Зная, как пользоваться одним стеком, вы сумеете
воспользоваться и остальными.

В более общем смысле понятие полиморфизма нередко выражается следующим
образом: «один интерфейс — множество методов». Это означает, что для группы взаимосвязанных действий можно разработать общий интерфейс. Полиморфизм помогает
упростить программу, позволяя использовать один и тот же интерфейс для описания
общего класса действий. Выбрать конкретное действие (т.е. метод) в каждом отдельном
случае — это задача компилятора. Программисту не нужно делать это самому. Ему достаточно запомнить и правильно использовать общий интерфейс.

Что такое ООП

Возникло как результат развития процедурного программирования. Основой объектно-ориентированных языков являются такие принципы, как:

  • инкапсуляция;
  • наследование;
  • полиморфизм.

Некоторые принципы, которые были изначально заложены в первые ООЯ, подверглись существенному изменению.

Примеры объектно-ориентированных языков:

  1. Pascal. С выходом Delphi 7 на официальном уровне стал называться Delphi. Основная область использования Object Pascal — написание прикладного ПО.
  2. C++ широко используется для разработки программного обеспечения, является одним из самых популярных языков. Применяется для создания ОС, прикладных программ, драйверов устройств, приложений, серверов, игр.
  3. Java — транслируется в байт-код, обрабатывается виртуальной машиной Java. Преимуществом такого способа выполнения является независимость от операционной системой и оборудования. Существующие семейства: Standard Edition, Enterprise Edition, Micro Edition, Card.
  4. JavaScript применяется в качестве языка сценариев для web-страниц. Синтаксис во многом напоминает Си и Java. Является реализацией Ecmascript. Сам Ecmascript используется в качестве основы для построения других скриптовых языков, таких как JScript, ActionScript.
  5. Objective-C построен на основе языка Си, а сам код Си понятен компилятору Objective-C.
  6. Perl — высокоуровневый интерпретируемый динамический язык общего назначения. Имеет богатые возможности для работы с текстом, изначально разработан именно для манипуляций с текстом. Сейчас используется в системном администрировании, разработке, сетевом программировании, биоинформатике и т. д.
  7. PHP. Аббревиатура переводится как препроцессор гипертекста. Применяется для разработки веб-приложений, в частности серверной части. С его помощью можно создавать gui-приложения с помощью пакетов PHP-GTK, PHP-Qt, WinBinder.
  8. Python — язык общего назначения, ориентирован на повышение производительности разработчика и читаемость кода. Был разработан проект Cython, с помощью которого осуществляется трансляция программ, написанных на Python в код на языке Си.

Инкапсуляция

Цель инкапсуляции — улучшить качество взаимодействия вещей за счет их упрощения.

А лучший способ упростить что-то — скрыть все сложное от посторонних глаз. Например, если вас посадят в кабину Боинга, вы не сразу разберетесь, как им управлять:

С другой стороны, для пассажиров самолета все выглядит проще: купил билет, сел в самолет, взлетели и приземлились. Вы можете с легкостью перелететь с континента на континент, обладая только навыками «купить билет» и «сесть на самолет». Все сложности в виде подготовки самолета к полету, взлета, посадки и различных внештатных ситуаций скрыты от вас. Не говоря уже о спутниковой навигации, автопилоте и диспетчерских центрах в аэропортах. И это упрощает нам жизнь.

С точки зрения программирования, инкапсуляция — это «сокрытие реализации». Мне нравится такое определение. Наш класс может содержать сотни методов и реализовывать очень сложное поведение в различных ситуациях. Но мы можем скрыть от посторонних глаз все его методы (пометить модификатором private), а для взаимодействия с другими классами оставить всего пару-тройку методов (пометить их модификатором public). Тогда все остальные классы нашей программы будут видеть в этом классе всего три метода и вызывать именно их. А все сложности будут скрыты внутри класса, как кабина пилотов от счастливых пассажиров.

Как нарисовать граф на 1С Промо

Описывается реализация на языке запросов 1С метода расположения вершин графа на плоскости, основанного на использовании электромеханической аналогии. При этом вершины графа представляются одноименными электрическими зарядами, дуги — пружинками. Силы взаимодействия вершин в этой системе переводят их из случайного начального в нужное конечное положение. Приведена обработка рисования графов «ГрафОграф», реализующая данный подход, показывающая также динамику процесса. Граф можно задать списком ребер вручную, выбрать из нескольких предопределенных примеров или сформировать по данным информационной базы.

1 стартмани

Абстракция, объект, класс, модули, иерархия, интерфейс, методы

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

Абстрагировать – это выделить значимые характеристики объектов, и в ООП важно выделить их правильно. Класс – это описание объектов, представителей класса: отличительные признаки, состояния, взаимодействия

Что это, из чего это состоит, что можно с этим делать и как именно? У классов и объектов есть атрибуты, данные (Data) и методы, то есть функции для управления данными

Класс – это описание объектов, представителей класса: отличительные признаки, состояния, взаимодействия. Что это, из чего это состоит, что можно с этим делать и как именно? У классов и объектов есть атрибуты, данные (Data) и методы, то есть функции для управления данными.

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

Иерархия: модули классов; базовый класс (класс описывает свойства объектов, содержит множество объектов, подклассов), производный класс (наследует свойства родительского класса и тоже содержит объекты); отдельно взятый объект (данные/Data, описывающие свойства объекта, + методы, то есть функции для работы с объектом, алгоритмы управления, действия, которые выполняет объект).

Методами в ООП называют функции для работы с объектами (что и как с этим делать, как и с чем это взаимодействует). Методы могут быть доступны другим классам и управлять их действиями, а могут быть действительны только внутри класса.

Совокупность тех методов класса, которые доступны и другим классам, называются интерфейсом. Чтобы тренировать объектное мышление, можно проводить аналогии с работой физических объектов и систем (с приборной доской в самолете, с пультом управления, с домофоном или лифтом в многоквартирном доме). Методы могут быть публичными и инкапсулированными, то есть скрытыми. По аналогии: панель управления в машине – на виду (интерфейс класса), а детали под капотом работают скрыто (так называемый «черный ящик»).

Принцип подстановки Барбары Лисков (LSP)

Соответствует букве L акронима SOLID. Согласно этому принципу подтипы должны быть заменяемыми для супертипа. Другими словами, методы или функции, работающие с суперклассом, должны иметь возможность без проблем работать также и с его подклассами.

EPAM Data Quality Hiring Weeks

12–25 апреля, Онлайн, Беcплатно

tproger.ru

События и курсы на tproger.ru

LSP тесно связан с принципом единственной ответственности и принципом разделения интерфейса.

Если класс реализует больше функциональности, чем подкласс, то последний может не поддерживать некоторые функции и тем самым нарушает данный принцип.

Ниже приведён пример такого кода на Java:

Функция провоцирует неявную ошибку при работе с экземпляром класса , потому что позволяет устанавливать отличные друг от друга значения ширины и высоты. Согласно принципу LSP, функции, использующие ссылки на базовые классы, должны иметь возможность использовать объекты производных классов, не зная об этом. Поэтому для корректной работы функция должна проверять, является ли передаваемый объект экземпляром класса Square, и в этом случае не позволять установить разные значения ширины и высоты. Отсюда идёт нарушение принципа.

Курс по теме SOLID Principles of Object-Oriented Design.

Уровни, глубина, прародители, циклы и аналоги запросом Промо

В продолжение публикации «Транзитивное замыкание запросом» [http://infostart.ru/public/158512/] добавлены другие варианты использования того же приема. Приведены запросы для быстрого определения уровней всех элементов справочника, максимальной глубины справочника, прародителей произвольных элементов справочника, запрос для быстрого определения циклов (на примере справочника спецификаций «1С:Управление производственным предприятием») и определения множеств аналогов номенклатуры (также на примере конфигурации «1С:Управление производственным предприятием»).

1 стартмани

Абстракция

В рунете народ до сих пор спорит над определением абстракции в ООП. И проблема даже не в том, что все неправы, а в том, что все правы. Чем программа меньше, тем сильнее абстракция привязана к языку Java, чем больше, тем сильнее привязана к моделированию/упрощению объектов реального мира.

Но вроде бы лучшие умы сошлись на том, что:

Абстракция — это использование только тех характеристик объекта, которые с достаточной точностью представляют его в программе. Основная идея состоит в том, чтобы представить объект минимальным набором полей и методов и при этом с достаточной точностью для решаемой задачи.

В языке программирования Java абстракция осуществляется через использование абстрактных классов и интерфейсов.

Абстракция в реальной жизни

Хороший пример абстракции в реальной жизни — описание должностей в компании или организации. Название должности — это одно, а обязанности каждой конкретной должности — это уже совсем другое.

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

Вы придумываете названия должностей в своей фирме, а потом «расбрасываете» обязанности по этим должностям. Абстракция – отвлечение от целостности объекта и выделение его главных свойств и составляющих, нужных нам.

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

Перегрузка операторов преобразования типов

Хотя типизация в C# строгая, типы можно преобразовывать. Например, мы можем конвертировать число типа float в число типа int:

С помощью перегрузки операторов преобразования типов мы можем прописать любую логику для конвертации объектов. Для наглядности создадим класс Hero:

В этом классе хранятся данные о персонаже. В MMO часто можно увидеть такой параметр, как мощь — это сумма всех характеристик героя или предмета. Например, её можно посчитать по следующей формуле:

Мощь = (сила + ловкость + интеллект) * уровень.

Мы можем использовать преобразование типов, чтобы автоматически переводить объект в его мощь. Для этого нужно использовать такую конструкцию.

Модификатор implicit говорит компилятору, что преобразование может быть неявным. То есть оно сработает, если написать так:

Explicit, наоборот, означает, что преобразование должно быть явным:

Вот как будет выглядеть перегрузка преобразования объекта класса Hero в int:

Вот как она будет использоваться:

Вывод в консоль будет следующим:

Структурное программирование

Дейкстра понял, что программирование – это сложно. Большие программы имеют слишком большую сложность, которую человеческий мозг не способен контролировать.

Чтобы решить эту проблему, Дейсктра решил сделать написание программ подобно математическим доказательствам, которые также организованы в иерархии. Он понял, что если в программах использовать только if, do, while, то тогда такие программы можно легко рекурсивно разделять на более мелкие единицы, которые в свою очередь уже легко доказуемы.

С тех пор оператора goto не стало практически ни в одном языке программирования.

Таким образом, структурное программирование позволяет делать функциональную декомпозицию.

Однако на практике мало кто реально применял аналогию с теоремами для доказательства корректности программ, потому что это слишком накладно. В реальном программировании стал популярным более «лёгкий» вариант: тесты. Тесты не могут доказать корректности программ, но могут доказать их некорректность. Однако на практике, если использовать достаточно большое количество тестов, этого может быть вполне достаточно.

Роль инкапсуляции

Инкапсуляция — это механизм программирования, объединяющий вместе код
и данные, которыми он манипулирует, исключая как вмешательство извне, так и неправильное использование данных. В объектно-ориентированном языке данные и код
могут быть объединены в совершенно автономный черный ящик. Внутри такого ящика
находятся все необходимые данные и код. Когда код и данные связываются вместе подобным образом, создается объект. Иными словами, объект — это элемент, поддерживающий инкапсуляцию.

Т.е. инкапсуляция представляет собой способности языка скрывать излишние детали реализации от пользователя объекта.
Например, предположим, что используется класс по имени DatabaseReader, который
имеет два главных метода: Open() и Close().

Фиктивный класс DatabaseReader инкапсулирует внутренние детали нахождения,
загрузки, манипуляций и закрытия файла данных. Программистам нравится инкапсуляция, поскольку этот принцип ООП упрощает кодирование. Нет необходимости беспокоиться о многочисленных строках кода, которые работают «за кулисами», чтобы
реализовать функционирование класса DatabaseReader. Все, что потребуется — это
создать экземпляр и отправлять ему соответствующие сообщения (например, «открыть файл по имени AutoLot.mdf, расположенный на диске С:»).

С идеей инкапсуляции программной логики тесно связана идея защиты данных.
В идеале данные состояния объекта должны быть специфицированы с использованием ключевого слова private (или, возможно, protected). Таким образом, внешний мир
должен вежливо попросить, если захочет изменить или получить лежащее в основе значение. Это хороший принцип, поскольку общедоступные элементы данных можно легко повредить (даже нечаянно, а не преднамеренно).

Основной единицей инкапсуляции в C# является класс, который определяет форму
объекта. Он описывает данные, а также код, который будет ими оперировать. В C# описание класса служит для построения объектов, которые являются экземплярами
класса. Следовательно, класс, по существу, представляет собой ряд схематических описаний способа построения объекта.

Код и данные, составляющие вместе класс, называют членами. Данные, определяемые классом, называют полями, или переменными экземпляра. А код, оперирующий
данными, содержится в функциях-членах, самым типичным представителем которых
является метод. В C# метод служит в качестве аналога подпрограммы. (К числу других
функций-членов относятся свойства, события и конструкторы.) Таким образом, методы класса содержат код, воздействующий на поля, определяемые этим классом.

Абстракция в ООП на Java

Абстракция – в основах ООП для начинающих это процесс скрытия всего, кроме релевантной информации об объекте. Например, нам не нужно знать, как работают часы, чтобы использовать их для определения времени. Абстракция позволяет сосредоточиться на том, что делает объект, а не на том, как он это делает:

// ОСНОВНАЯ АБСТРАКЦИЯ
// Мы можем использовать System.out.println(«Hello»), чтобы вывести строку на
// консоль и не заботиться о том, как работает метод println.
// АБСТРАКТНЫЕ КЛАССЫ
// Абстрактные классы содержат только объявление метода. Их назначение —
// выполнять роль суперклассов для других классов. Они не определяют, как
// методы реализуются, а только что они реализуют. Абстрактные классы не могут
// быть установлены, и подклассы ДОЛЖНЫ реализовать абстрактные методы.
abstract class FlyingAnimal {
public abstract void Fly();
}
class Bird extends FlyingAnimal {
protected String name;
protected int age;
Bird(String nm, int newAge) {
name = nm;
age = newAge;
}
@Override
public void Fly() {
System.out.println(«Flaps wings majestically.»);
}
}
// ИНТЕРФЕЙС
// Классы могут наследоваться только от одного суперкласса, но они могут
// реализовать несколько интерфейсов. Это расширяет возможности для применения
// абстракции. Классы, которые реализуют интерфейс, ДОЛЖНЫ реализовать
// методы в интерфейсе.
// Стандартные классы
class Animal {
private String name;
private int age;
public void identify() {
System.out.println(«I am an animal!»);
}
public void rename(String newName) {
name = newName;
}
public String getName() {
return name;
}
public void setAge(int newAge) {
if(newAge > 0)
age = newAge;
}
public int getAge() {
return age;
}
}
// Интерфейс для животных, которые могут летать. Нам нет дела до того,
// как они летают, просто они могут летать.
public interface ICanFly {
void Fly();
}

// Интерфейс для животных, которые могут плавать. Нам нет дела до того,
// как они плавают, просто они могут плавать.
public interface ICanSwim {
void Swim();
}
// Утка — это животное, которое может и летать, и плавать.
class Duck extends Animal implements ICanFly, ICanSwim {
public void Quack() {
System.out.println(«QUACK!»);
}
@Override
public void Identify() {
System.out.println(«I am a duck!»);
}
@Override
public void Fly() {
System.out.println(«Flaps wings majestically.»);
}
@Override
public void Swim() {
System.out.println(«Kicks feet.»);
}
}
// Рыба — это животное, которое умеет плавать

Обратите внимание на то, что
// реализация метода Swim отличается для утки и для рыбы.
class Fish extends Animal implements ICanSwim {
@Override
public void Identify() {
System.out.println(«I am a fish!»);
}
@Override
public void Swim() {
System.out.println(«Wiggles fish-body»);
}
}
// Самолет — это не животное, но он все равно может летать.
class AirPlane implements ICanFly {
protected String name;
protected int mileage;
@Override
public void Fly() {
System.out.println(«Turns propeller»);
}
}

Методы в Java

Методы используются для выполнения определённых действий. Они представляют поведение объекта. Они могут быть publicили private, т.е. к ним нельзя получить доступ извне, но они должны быть объявлены внутри класса. Методы можно определить, как группу операторов, которые выполняют некоторые операции и могут возвращать или не возвращать результат.

Продолжая нашу аналогию с автомобилем, следующий фрагмент кода показывает пример метода на Java:

Параметры метода используются для передачи данных в метод, а возвращаемый тип получает значение из метода, если таковое имеется. В ООП есть два популярных метода:

  • get Метод, который получает значение конкретного поля данных.
  • set Метод устанавливает своё значение.

Два или несколько методов могут иметь одно и то же имя, если они различаются числом или типами параметров. Это позволяет методу выполнять различные операции в зависимости от природы его аргументов. Эта концепция называется перегрузкой метода.

Добавить комментарий

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