ооп — Отличия абстрактного класса от интерфейса (abstract class and interface)
Мне кажется достаточно любопытным, что данный вопрос помечен тегом «ооп», но при этом во многих ответах явно просачиваются специфические аспекты конкретных языков программирования. Я же постараюсь дать ответ исходя из понятий ООП и лишь потом показать, почему вообще это различие появилось в некоторых языках программирования.
Абстрактные классы и интерфейсы имеют определенное отношение к наследованию, точнее к моделированию мира. С их помощью мы хотим выразить, что у определенной группы вещей в нашей системе есть что-то общее: некоторое общее поведение, которое отличает эту группу штуковин от всех остальных.
Допустим, для примера, мы хотим смоделировать кнопки в интерфейсе пользователя. Поскольку мы говорим об ООП, то мы выделим некоторый тип Кнопки с некоторым набором операций (которые определяют поведение) и скрытого состояния, на которое опирается поведение (да, скрытого состояния может и не быть). При этом мы можем выделить три вида операции:
Конкретная фиксированная операция, которая должна быть абсолютно стабильно для всех типов кнопок.
Конкретная операция с поведением по умолчанию (т.е. операция, чье поведение подходит для многих типов кнопок, но могут быть кнопки с другим поведением).
Декларация операции без конкретной реализации (т.е. операция, чье поведение определить невозможно, поскольку на этом этапе не известно разумное поведение по умолчанию или же операции могут слишком сильно различаться у разных кнопок).
Другими словами, тип Кнопки может содержать невиртуальные методы (non-virtual methods), виртуальные методы (virtual methods) и
Наличие разных типов методов является очень важным инструментом моделирования и позволяет весьма точно выражать намерения проектировщика. Например, мы можем добавить невиртуальную операцию «Нажатия на кнопку», которая будет делегировать часть своей работы виртуальному (или абстрактному методу) «Обработать нажатие», но при этом всегда выполнять определенную часть работы (прозорливый читатель увидит в этом описании паттерн «Шаблонный метод»).
После того, как мы определили базовый тип, пришло время определить произвольные типы. И тут начинаются вопросы. Точнее, вопросов никаких не возникает, когда у типа есть лишь один непосредственный базовый тип или все базовые типы содержат лишь декларации операций. Не проблема, унаследовать «Кнопку меню» от «Кнопки» и переопределить метод «Нажать на кнопку». Но что, если наш тип «Кнопка меню» будет отнаследован от двух типов с одной и той же виртуальной операцией? Как переопределить лишь одну, а оставить другую? А как быть клиенту нового типа и различить, какую операцию вызвать? А что если у двух базовых типов есть поле с одним именем? А что если у одного базового типа метод «Нажать кнопку» реализован, а у другого – лишь описан в виде декларации?
Нет, все эти проблемы решаемы, и в С++, и Eiffel, и других языках программирования вы можете довольно гибко контролировать, что и как переопределять, что прятать, что выставлять наружу и как вызвать метод определенного базового типа. Но для авторов некоторых языков программирования подобная сложность показалась излишней, и они пошли на хитрость и отделили типы, которые содержат лишь декларации методов в отдельную категорию, и так появились интерфейсы.
Теперь будет легко провести разницу между тремя понятиями – интферфейса, абстрактного базового класса и конкретного базового класса.
Интерфейс – описывает некоторое семейство типов и содержит лишь декларации операций (да, я осознанно пишу слово «декларация», а не использую слово «контракт», которое в ООП имеет вполне определенное значение).
Абстрактный базовый класс описывает некоторое семейство типов, но помимо декларации операций может содержать реализации по умолчанию (виртуальные методы) и фиксированные операции (невиртуальные методы).
Конкретный класс описывает некоторое семейство типов, которое готово для использования клиентами. Такой класс не может содержать декларации операций и все его операции должны быть либо фиксированными (невиртуальные методы) или содержать реализацию по умолчанию (виртуальные методы). Есть еще один подвид конкретных классов –
Выделение интерфейсов в отдельную категорию полезно не только с точки зрения упрощения реализации языков программирования, но и для выделения разных подходов к моделированию. Так, например, наследование классов моделирует отношение «Является» («Кнопка меню» ЯВЛЯЕТСЯ «Кнопкой»), а базовые классы обычно содержат определенный функционал, тесно связанный с функционалом производного класса. Базовые классы не просто моделируют группу типов, но и позволяют использовать повторно существующий функционал.
Интерфейсы же, по своей природе обладают меньшей связностью (low coupling), поскольку не обладают конкретным поведением, которое может осложнить жизнь класса-наследника. Интерфейсы также могут моделировать отношение «Является» («Кнопка меню» ЯВЛЯЕТСЯ «IКнопкой»), но могут определять и менее жесткое отношение «Может выполнять роль» (CAN DO). Например, интерфейс IEquatable
из BCL определяет «дополнительное» поведение, которое говорит о возможности типов сравнивать значения объектов.
javatalks.ru / Абстракция в Java
Drylozav:Добрый день. Читаю про ООП и там сказано , что у ООП есть 3 основных основных понятия. Это инкапсуляция, полиморфизм и наследование. Так же сказано , что к ним еще можно отнести абстракцию. Про первые три понятия я понял , а вот про абстракцию что то вообще ничего не пойму. Можете на каком то понятном примере объяснить , что такое абстракция в ООП ? (Книга : «ОО Анализ и Проектирование» , Гради Буч ). У первых трех понятий есть конкретное применение в языке , а про абстракцию читаю только в теории и не пойму зачем она и какой в ней смысл?
Не парь голову, читай дальше. Просто парнишка, который писал книгу, хочет казаться ученым)) Это как начинать изучения английского с заучивания всяких грамматических выкрутасов типа «I might have been»Вот пример для объяснения абстракции. Вот есть у нас некоторый уникальный человек, Вася Пупкин, он один такой на планете, поскольку обладает мильёном уникальных черт характера и т.д.
Но, в нашем приложении например, нам не надо все эти уникальные черты, а надо только ФИО, дата рождения, где и кем работает.
Мы значит вводим такую абстракцию:
ФИО
Дата рождения
Место работы
Должность
Из уникального человека оно вырезает нечто существенное с точки зрения поставленной задачи, и ОТБРАСЫВАЕТ несущественные с точки зрения задачи детали. Такое выделение и отбрасывание есть абстракция.
Каждый класс или интерфейс в объектно ориентированном языке программирования представляет собой абстракцию.
Далее. В том же приложении могут быть выделен еще один уровень абстракции:
ФИО
Дата рождения
так же как предыдущий уровень абстракции отбрасывал кучу индивидуальных особенностей объектов реального мира, данный уровень отбрасывает еще пару нюансов: место работы и должность
На данном уровне абстракции например можно организовать склонение ФИО. Какая нам нахрен разница где он работает и работает ли он вообще, если нам надо просклонять ФИО?
Как-то так
Но это как было сказано выше суть болтология. От себя добавлю, что это болтология со свойствами голого короля: все обязаны демонстрировать понимание и важность этих принципов, а кто усомнится, тот типа либо полный дурак, либо находится не на своем месте.
Так что рекомендую потратить на попытки понять все это денек-два, и двигаться дальше
Абстрактные классы и интерфейсы. Курс «Программирование на Java»
От абстрактных классов и интерфейсов нельзя создавать объекты. Они служат своего рода шаблонами для обычных классов.
Абстрактный класс – это некое обобщение. Например, не существует конкретного объекта, напрямую созданного от класса Млекопитающие. Класс Млекопитающие – обобщение, абстракция. От этого класса создаются дочерние классы – отряды, и только от них уже создаются объекты. Абстрактный класс отвечает на вопрос «что чем является». Например, парнокопытные являются млекопитающими.
Интерфейс – это в большинстве случаев определенная функциональность. Например, способность летать, распаковывать архив, парсить страницу. Интерфейс может наследоваться любым классом. Интерфейс отвечает на вопрос «у кого что есть». Например, у самолетов и птиц есть способность к полету. Несвязанные между собой ближайшим общим предком классы могут наследовать один и тот же интерфейс.
Один класс может использовать несколько интерфейсов. Этим объясняется их популярность в Java, так как здесь отсутствием множественное наследование классов.
В Java, чтобы объявить класс абстрактным, надо в заголовке прописать слово abstract. Также обычно должен быть хотя бы один абстрактный метод. Рассмотрим пример:
public class AbstrTest { public static void main(String[] args) { UsualClass a = new UsualClass(); a.strPrint(); a.intPrint(); } } abstract class AbstrClass { abstract void strPrint(); void intPrint() { System.out.println(1); } } class UsualClass extends AbstrClass { void strPrint() { System.out.println("hi"); } }
В данном случае
Нельзя создавать объекты от класса AbstrClass, так как в его заголовке есть слово abstract. (Однако переменную такого типа можно было бы создать.)
Нельзя опустить реализацию метода strPrint() в классе UsualClass, поскольку он наследник абстрактного класса, в котором указанный метод объявлен абстрактным.
Абстрактные методы не имеют тел.
Если бы класс AbstrClass не содержал абстрактный strPrint(), или метод был бы не абстрактным, то в UsualClass можно было бы не переопределять данный метод. Таким образом, объявляя абстрактные методы, мы заставляем дочерние классы придерживаться определенного стандарта.
Абстрактный класс может не иметь абстрактных методов. Отличие такого класса от обычного родительского только в том, что от него нельзя создавать объекты.
При определении интерфейсов вместо class пишется ключевое слово interface. Если есть родительские интерфейсы, они также как в случае классов перечисляются после слова extends. У интерфейсов не может быть родительских классов.
Поскольку все методы интерфейсов по умолчанию абстрактные и публичные, перед их именами не требуется писать соответствующих модификаторов.
Если класс использует интерфейс, имя интерфейса указывается после слова implements (реализует). В случае наследования нескольких интерфейсов они перечисляются через запятую. Наследовать интерфейсы могут как обычные, так и абстрактные классы.
Если класс является наследником как другого класса, так интерфейса, в его заголовке сначала пишется extends имя_класса, затем implements имя_интерфейса.
... interface InterFace { String getStr(); } class UsualClass extends AbstrClass implements InterFace { void strPrint() { System.out.println("hi"); } public String getStr() { return "HI"; } }
Если не указать слово public в реализации метода getStr(), будет ошибка.
Зачем нужны абстрактные методы, будь они в абстрактных классах или интерфейсах, если вся их реализация ложится на плечи дочерних классов? Если вы создаете группу порожденных от сестринских классов объектов, то можете присваивать их переменным типа абстрактного класса или интерфейса и обрабатывать всю группу, например, в одном цикле. У всей группы будут одни и те же методы, хотя реализация будет зависеть от типа объекта.
import java.util.ArrayList; public class ListObjects { public static void main(String[] args) { ArrayList<Animal> house = new ArrayList<>(); house. add(new Cat()); house.add(new Dog()); house.add(new Dog()); for (Animal animal : house) { animal.voice(); } } } abstract class Animal { abstract void voice(); } class Cat extends Animal { void voice() { System.out.println("Meow"); } } class Dog extends Animal { void voice() { System.out.println("Woof"); } }
Приведенная программа один раз мяукнет и два раза гавкнет, так как для каждого животного будет вызвана его реализация метода. Это также пример полиморфизма.
В случае наследования интерфейса было бы так:
... interface Animal { void voice(); } class Cat implements Animal { public void voice() { System.out.println("Meow"); } } class Dog implements Animal { public void voice() { System.out.println("Woof"); } }
В Java над переопределяемыми методами принято писать аннотацию @Override. Так при взгляде на класс сразу понятно, что метод не определяется, а переопределяется.
В последних версиях языка Java в интерфейсах можно писать реализацию методов. Перед такими методами добавляется ключевое слово default:
interface Animal { void voice(); default void drink() { System.out.println("I drink!"); } }
Основанная на JAVA абстракция и интерфейс
Во-первых, абстрактный метод
форма
Должен быть в абстрактном методе
Есть только утверждение, но нет конкретной реализации. Формат объявления абстрактного метода:
abstract void fun();
Во-вторых, абстрактный класс
Почему универсальные классы должны стать абстрактными классами?
1. Методы в этом классе должны быть определены 2. Методы в этом классе должны быть полиморфными в подклассе (то есть они должны быть переписаны)
Определения
Классы с 0 до более абстрактных методов
эффект
Используйте абстрактные классы для ограничения реализации
public abstract class Animal{ }
цель
- Избегайте случайности разработки подкласса (родительский класс ограничивает методы, которые должен иметь подкласс, но конкретный процесс реализуется подклассом)
- Избегайте бессмысленного создания экземпляров родительского класса (потому что нам обычно нужно только создавать подклассы экземпляров при использовании определенных методов)
Вопросы, требующие внимания
- аннотация не может использоваться со статическим финальным приватным и т. д.
3. Интерфейс
Определения
интерфейсВ языке программирования JAVA этоАбстрактный тип(Абстрактный тип), он используется для того, чтобы класс (Class) должен реализовывать указанный метод,Разрешить объектам разных классов общаться, используя некоторые их общие атрибуты (методы), Интерфейсы обычно объявляются как интерфейсы. Они могут содержать только сигнатуры методов и объявления констант (объявления переменных включают в себя static и final. Интерфейс содержит только объявления методов (за исключением методов по умолчанию и статических методов), и реализации метода не будет)
public interface Predator { boolean chasePrey(Prey p); void eatPrey(Prey p); int temp; default void connection(){ System.out.println(«Я метод по умолчанию в интерфейсе»); } static void test(){ System.out.println(«Я статический метод в интерфейсе»); } }
Правила именования файлов интерфейса
Я + конкретные функции;
Особенности:
- Все методы в интерфейсеАбстрактный метод, Так что нет необходимости добавлять Аннотация
- Поскольку интерфейс представляет собой набор внешних поведений, любой метод в интерфейсеобщественного(Public), нет необходимости сознательно добавлять
- Интерфейс не может быть создан, он может быть реализован только классом, и он должен быть реализован в классе, который реализует интерфейсВсе методы (то есть вы должны переопределить все методы в интерфейсе в классе, который реализует интерфейс), Иначе он должен быть объявлен как абстрактный класс
- JAVA может реализовать несколько интерфейсов в классе
- Интерфейсы также имеют отношения наследования и могут наследоватьНесколько родительских классов(Отличается от обычного класса)
реализация
public class Lion implements Predator { public boolean chasePrey(Prey p) { } public void eatPrey (Prey p) { } }
Собеседование Java разработчика.
Часто задаваемые вопросыВ этом посте, я с удовольствием раскрою, вероятно, большинство возможных вопросов на Java-собеседовании, от простых до самых сложных.
- Чем отличаются статические методы и переменные от нестатических? Объясните их архитектуру в памяти?
- Почему вы используете ключевое слово final с классами и переменными? Приведите пример, в каком случае вы предпочтёте использовать final.
- Что такое приведение типов? Предположим, что есть данные, которые имеют тип double, как вы можете показать эти данные в типе int?
- Каковы основные преимущества полиморфизма? Что является альтернативой полиморфизма?
- Что такое цепочка конструктора в Java?
- Расскажите о конструкторах при наследовании?
- Ключевое слово ‘Super’ используется для доступа к свойствам суперкласса. Как получить доступ к этим свойствам, если использовать ‘Super’ не разрешено?
- Предположим, у вас в сумке учебники за 11-й, 12-й классы, объясните, как вы будете использовать наследование, чтобы показать отношения между ними?
- Почему компилятору Java нужен только статический основной метод?
- Как вы понимаете анонимность? Каковы особенности анонимного массива и объекта в Java? Как анонимность влияет на структуру памяти?
- Почему Java требует внутренние классы? Как вы понимаете статические внутренние классы в Java? И где вы будете использовать статический и нестатический класс?
- Абстракция скрывает информацию в Java. Как в Java представлена абстракция? Напишите программу, где вы показываете абстракцию, и такую же программу, но без абстракции.
- Какие существуют способы создания объектов в Java? Как вы понимаете создание объекта в Java? Где будет выделена память для создания объекта?
- JVM — это компилятор для запуска ваших программ, опишите этапы, начиная с написания кода, до его выполнения машиной.
- Что значит неупорядоченное хранение данных в Java, и в чём отличие от стэка?
- Как JVM понимает вашу программу и каков цикл выполнения кода в java?
- Какие различие между модификаторами public, private и protected. Объясните, зачем вам нужны все эти модификаторы в коде?
- Каков будет результат, если в Java установить main метод в private?
- Что такое аргумент командной строки? Как можно дать команду Java программе, выполнить операцию чтения файла, с помощью аргумента командной строки?
- В каком случае вам понадобится супер конструктор? Если у вас нет возможности использовать супер конструктор, есть ли возможность выполнить конструктор супер класса, если да, то объясните как?
- Интерфейс это на 100% абстракция, как вы понимаете 100% абстракцию, и как это реализовать в Java? Напишите программу используя интерфейс и абстрактный класс. Зачем нужен интерфейс, если можно использовать абстрактные классы?
- Что такое многоуровневое наследование в Java? Поддерживает ли Java множественное наследование, объясните свои мысли?
- Java является объектно-ориентированным языком, объясните, что это значит?
- Как вы понимаете проектирование паттернов в ООП? Если вам нужно создать собственные паттерны, то какие параметры вы будете учитывать?
- Напишите несколько базовых программ, например:
- Палиндром
- Реверс строки
- Узоры из звёздочек * всеми возможными способами
- Найти минимальное и максимальное число в данном массиве
- Дан пустой массив, фиксированного размера, с именами городов и людей. Напишите программу, которая достаёт имя города, определённого человека. Вы должны получить имя города и имя человека во время выполнения.
- Напишите программу умножения матриц на Java
- Как вы разобьёте массив на равные части, рассмотрите все возможные варианты
- Напишите программу, используя switch… case, где пользователь должен выбрать день недели, а затем, программа выдаст первые три буквы этого дня, заглавными, в качестве ответа пользователю.
- Напишите программу, в которой пользователь вводит буквы в строку, а ответом будет вывод повторяющихся символов и их количество.
- Преобразуйте любое заданное число в двоичный формат
- Преобразуйте в файле, каждую строчную букву в заглавную и наоборот, выведите результат.
- Напишите программу, в которой пользователь вводит имя, возраст и название колледжа. Результатом будет вывод этих данных с соблюдением порядка. Если пользователь вводит имя повторно, программа выводит подсказку с доступными вариантами.
26. Как вы понимаете операторы break и continue в итерации?
27. Напишите все возможные варианты синтаксиса для цикла for?
28. В чем разница между циклами while и for? И объясните, в каких случаях, какой из них лучше применять?
29. Как вы понимаете область видимости переменной? Требуется ли инициализировать локальную переменную, объясните почему?
30. Что такое интерпретатор в Java? В чём разница между компиляцией и интерпретацией в Java?
31. Что значит возвращаемый тип данных в Java? Предположим, что вам нужно вернуть int данные, но тип возвращаемого метода double, объясните, будет ли это работать или нет?
32. Можно ли переопределить методы или переменные суперкласса? Объясните свой ответ.
33. Что такое цепочка объектов в Java?
34. Объясните разницу между параметрами и аргументами в Java?
35. Опишите класс Singleton в Java. Где и почему вы будете использовать Singleton?
36. Поскольку Java имеет многопоточную природу программирования, сначала объясните, что это такое? Затем:
- Как это можно использовать?
- Объясните и напишите все возможные варианты создания потока на Java?
- Что такое thread sleep в Java?
- Предположим, у вас есть два разных файла, напишите программу с двумя потоками, в которой каждый поток будет читать и выводить один из файлов, и оба будут выполнять операцию одновременно.
- Объясните архитектуру потоков в Java?
- Что такое объединение потоков в Java?
- Приведите пример функции, связанной с многопоточностью в Java.
37. Является ли Java процедурным языком или функциональным, объясните свой ответ?
38. Какие параметры отличают Java от других языков? Приведите практические примеры, где Java подходит лучше, чем любой другой язык.
39. Почему в Java реализована обработка исключений? Перечислите все причины?
40. Давайте представим, что Java не имеет механизма обработки ошибок. Напишите функцию, где вам нужно обрабатывать ArrayIndexOutOfBoundException.
41. Объясните разницу между try, catch и finally?
42. Представьте своё тело как «задачу», спроектируйте каждую часть тела согласно концепции ООП.
43. Попытайтесь связать каждую концепцию ООП с тем, что вас окружает.
Спасибо
Перевод статьи: Vishal Jain Most Frequently Asked Java Interview Questions.
Разница между абстрактным классом и интерфейсом в Java
Термин «Абстракция» означает скрытие внутренней реализации функции и только отображение функциональности для пользователей. Это означает, что абстрактный класс является классом, который частично реализуется программистом. Он может содержать один или несколько абстрактных методов. Он не может быть создан, он может использоваться только как суперкласс по своим подклассам. Эти методы — это просто определения функций, которые говорят разработчику, что метод должен быть реализован в дочернем классе. Абстрактные классы используются для создания шаблона для его подклассов, он может захватывать общие характеристики подклассов.
Интерфейс
Интерфейс — это тип, который содержит только сигнатуры методов, делегатов или событий и не имеет реализации. Реализация методов выполняется классом, который реализует интерфейс. Это полностью абстрактный класс; ни один из его методов не реализован, и вместо того, чтобы подклассифицировать класс от него, говорят, что он реализует этот интерфейс. Поэтому, если класс реализует интерфейс, он говорит внешнему миру, что он обеспечивает конкретное поведение.
Ключевыми техническими отличиями между абстрактным классом и интерфейсом являются:
- Абстрактный класс может иметь абстрактные и не абстрактные методы, тогда как интерфейс могут иметь только абстрактные методы. Начиная с Java 8, он может также иметь стандартные и статические методы.
- Абстрактные классы могут иметь константы, члены, заглушки методов (методы без тела) и определенные методы, тогда как интерфейсы могут иметь только заглушки констант и методов.
- Абстрактные классы могут иметь конструкторы, но интерфейсы могут иметь конструкторы.
- Абстрактные методы классов могут иметь модификаторы доступа с любой видимостью, но методы интерфейса неявно публичны и абстрактны .
- Абстрактные классы могут иметь основной метод, поэтому мы можем запускать его, тогда как интерфейс не имеет основного метода, поэтому мы не можем его запускать.
- Абстрактный класс может расширять один другой класс и может реализовывать один или несколько интерфейсов, но интерфейс может распространяться только на один или несколько интерфейсов.
- Детский класс может определять абстрактные методы с тем же или менее ограничительная видимость, тогда как класс, реализующий интерфейс, должен определять методы с одинаковой видимостью (public).
- По сравнению с Interf ace, абстрактный класс быстрее, чем интерфейс, потому что интерфейс несколько медленнее, так как требуется некоторое время, чтобы найти реализованный метод в классе.
- В абстрактном ключе ключевое слово «abstract» является обязательным для объявления метода как абстрактное, тогда как в ключе ключевое слово интерфейса «абстрактный» необязательно объявлять метод как абстрактный
Источник: http://net-informations.com/Java/cJava/abstract.htm
Реализация метода построения абстракции математических операций на языках программирования высокого уровня Текст научной статьи по специальности «Компьютерные и информационные науки»
УДК 004.02
А.Н. Беликов, С.А. Белоусова, Е.А. Борисова
РЕАЛИЗАЦИЯ МЕТОДА ПОСТРОЕНИЯ АБСТРАКЦИИ МАТЕМАТИЧЕСКИХ ОПЕРАЦИЙ НА ЯЗЫКАХ ПРОГРАММИРОВАНИЯ
ВЫСОКОГО УРОВНЯ*
Целью статьи является анализ реализации математических операций на языках программирования высокого уровня. Для этого были созданы программы на языках Python и Java, в основу которых положена созданная базовая абстракция выполнения математических операций. Базовая абстракция типов математических операций является системой действия, которая состоит из типов действий, которые необходимо выполнить для получения цели. Предполагается, что любой пользователь, заполнив ее своим собственным содержанием, может выполнять различные по сложности арифметические операции. Для создания более сложных программ, информационных систем необходим набор таких базовых абстракций, каждая из которых будет предназначена для выполнения различных типов действий. В свою очередь, единичное действие состоит из механизма действия: элементов, функций, инструментов. В статье базовая абстракция была заполнена конкретным содержанием — действиями, которые выполняются для создания программы выполнения математических операций. Основной задачей статьи является определение адекватности языка программируемому объекту — абстракции. Для выявления адекватности используемых языков для реализации базовой абстракции, она была запрограммирована на двух языках. Анализ эффективности языков проводился по следующим критериям: динамическая типизация, сложность реализации программы в веб, и вместе с тем, сложность веб-фреймворка, объектно-ориентированные возможности. По каждому из критериев описываются достоинства и недостатки каждого языка. Можно сделать вывод, что для решения описанной задачи целесообразнее использовать Python, т.к. он удовлетворяет требованиям, и по перечисленному набору критериев он превосходит язык Java.
Python; java; структура действия; базовая абстракция; веб-программирование.
A.N.Belikov, S.A.Belousova, E.A.Borisova
IMPLEMENTATION OF THE METHOD OF MATHEMATICAL OPERATIONS ABSTRACTION BUILDING IN HIGH LEVEL PROGRAMMING LANGUAGES
The aim of the article is to analyze the implementation of mathematical operations on the highlevel languages. For this, there have been established programs in Python and Java, which are based on basic abstraction of performing the mathematical operations. Basic abstraction of mathematical operations types consists of actions that must be performedfor the purpose obtaining. It is assumed that any user can perform various arithmetic operations of any complexity by filling it with their own content. To create more complex programs and information systems there is needed a set of basic abstractions, each of which is designed to perform various types of actions. In turn, a single action consists of elements, functions, tools. In the article the basic abstraction was filled with concrete content — single actions that are performed to create a program to perform mathematical operations. The main objective of the article is to determine the adequacy of language to programmable object — abstraction. To identify the adequacy of the language for the implementation of the basic abstraction, it has been programmed in both languages. Analysis of the effectiveness of languages was held on the following criteria: dynamic typing, the complexity of the program on the web, and at the same time, the complexity of the web-framework, object-orientedfeatures. For each of the criteria the advantages and disadvantages of each language are described. It can be concluded that it is advisable to use Python to solve the described problem, because it satisfies the requirements, and according to the listed set of criteria it transcends Java language.
Python; java; action structure; basic abstraction; web-programming.
* Исследование выполнено при финансовой поддержке РФФИ в рамках научного проекта № 15-07-04250.
Введение. В настоящее время при разработке информационных систем используются различные подходы [11]. Однако, ни один из существующих подходов не позволяет описать процесс разработки конфигурируемой ИС.
Конфигурируемые системы предназначены для самостоятельного создания конечным пользователем (экспертом предметной области) прикладной ИС для собственных нужд. В процессе такого создания пользователь выполняет совокупность действий. Хотя действия различны по содержанию, но имеют схожую структуру. Предполагается, что любой пользователь, заполнив структуру действия своим собственным содержанием, может выполнять различные по сложности действия. Для создания более сложных программ, информационных систем необходим набор таких базовых абстракций, каждая из которых будет предназначена для выполнения различных типов действий.
Целью статьи является рассмотрение структуры действия на примере выполнения математических операций и анализ реализации математических действий на языках программирования высокого уровня.
Постановка задачи. Необходимо получить структура действия по выполнению определенного типа математических операций, которую необходимо отразить на языке программирования высокого уровня — реализовать ее.
Для решения поставленной задачи необходимо представить структуру системы действия и механизма действия, которые требуется в дальнейшем представить в виде абстракций языка программирования. Необходимо показать степень адекватности абстракции языка программирования и реализуемых с его помощью структурных элементов программы, реализующей выполнение математических операций.
Для этого необходимо: 1) создать структуру математической абстракции; 2) выделить из нее составляющие компоненты; 3) определить типы связей между ними. Со стороны языка программирования необходимо показать, каким образом и насколько сложно можно описать компоненты математической абстракции с помощью двух используемых языков — Python и Java. Необходимо определить такой язык, с помощью которого можно описать абстракцию выполнения математических операций, используя минимальное количество операторов и структур абстракции языка программирования.
Для этого необходимо переложить структуру действия (структуру математической абстракции) в термины языка программирования. Тогда элементами действия будут являться переменные и константы. Функциями будут являться операции, в том числе математические. Каждый структурный элемент действия будет представлен на языке программирования с помощью класса. Для создания программы, реализующей математическую операцию определенного типа на языке программирования, необходимо программно реализовать выполнение действия, состоящего из переменных, являющихся элементами данного действия, математической функции, являющейся отношением между элементами данного действия, и конструктора класса действия, являющегося инструментом для данного действия.
Описание структуры базовой абстракции. Базовая абстракция представлена на рис. 1. Анализ и синтез являются известными методами системного подхода. Основой любого действия является цель, которая анализируется и разбивается на элементы, функции и инструменты действия [1, 2]. Разбивая цель на такие компоненты, мы получаем действие по получению данной цели. Аналогично анализируются элементы, функции и инструменты, при этом мы имеем действия по их получению, и т.д. Полученные в ходе анализа элементы, функции, инструменты действия более низкого уровня синтезируются, чтобы снова получить цель, как показано на рис. 1. Если цель не получена, то необходимо проверить содержание компонентов действия и изменить их.
Анализ
Цель Элементы Функции Инструменты
Син етез Ана Ана
лиз лиз СИПТез Анализ
Синтез-
Рис. 1. Структура системы действия
Реализация базовой абстракции математической операции. Первым шагом будет представление элементов, функций и инструментов действия по получению математической операции на языке программирования высокого уровня в виде действий. [3-5].
Таким образом, представление элемента «Переменная» (Э1 и Э2) в виде действия можно описать следующим образом: элементом является значение переменной, функциями для данного действия являются Ф1 — задать значение и Ф2 — получить значение, а инструментом И1.1 — класс языка программирования.
Представим в таком же виде функцию Ф1 — математическая операция, получим следующее: элементом является Эф — «Параметр», функцией для действия по созданию математической операции является Фф — «Выполнить», а инструментом Иф — «Структура функции языка программирования».
Теперь составим действие для получения инструмента «Конструктор класса действия». Данное действие состоит из Эи1 — «Правила алгебры» состоящее из:
1. Выделение переменных;
2. Выделение констант;
3. Выделение алгебраических операций;
4. Получение алгебраического результата.
Вторым элементом действия по получению инструмента является Эи2 — «Готовые запрограммированные классы». Функцией для данного действия является Фи — «Сопоставление алгебры классовой структуре», а инструментом Ии — «Синтаксис языка программирования». Структура действия представлена на рис. 2.
Цель Метод Элементы Функции Инструменты
Запр огр аммировать математическую операцию М. Метод создания программы на языках высокого уровня 31. Переменная 1 32. Переменная 2 Ф1.Математ нческая функция И1 — Конструктор класса действия
М1. Метод задания переменной М2. Метод задания математической функции МЗ. Метод описания конструктора класса
Элементы классов М4. Метод определения элементов классов Ээ1. Значения переменных Эф 1.1 Параметр Эи1.1. Правила алгебры: констант, 3) Выделение операций, 4) Получение алгебраического результата
Функции классов М5. Метод определения функций классов Фэ1. Задать значение Фэ2. Получить значение Фф1.1 Выполнить ФиП. Сопоставление алгебры классовой структуре
Инструменты классов М6. Метод определения инструментов классов Иэ1. Класс языка программирования Иф1.1 Структура функции языка программирования Ии1.1. Синтаксис языка прогр аммирования
Рис. 2. Система действия «Запрограммировать математическую операцию»
Из представленного шаблона некоторые элементы, функции и инструменты являются конечными и не имеет смысла расписывать действия по их созданию, а некоторые имеет.
Инструмент — это вид отношений между элементом и функцией (это правила по которым устанавливаются отношения).
М. Метод создания программы на языках программирования высокого уровня. Состоит из следующих шагов:
1) Выделение переменных
2) Выделение математической функции
3) Использование конструктора класса действия
Распишем функцию «Сопоставления алгебры классовой структуре» входящую в действие по созданию инструмента «Конструктор класса действия».
Итак, данное действие состоит из элементов Эф1.1 — «Тип элемента алгебраической формулы», который состоит из четырех подэлементов:
1) Эфи* 1. — число;
2) Эфи* 2. — латинская буква;
3) Эфи* 3. — Алгебраическая операция.
Второй элемент Эф1.2 «Тип класса», который состоит из трех подэлементов:
1) Эфи** 1. — Класс константы;
2) Эфи** 2. — Класс переменной;
3) Эфи** 3. — Класс операции.
Функцией данного действия является Фф — «Выбор типа элемента». Инструмент представляет собой набор правил по которым функция выполняется над элементами. Иф1. Правила сопоставления:
1) Если часть формулы — число, то выбрать класс-константу.
2) Если часть формулы — латинская буква, то класс — переменная.
3) Если часть формулы — алгебраическая операция, то класс — операция.
Описанные действия показаны на рисунке 3.
Для элемента Эфи1.1.2 «Тип класса» распишем действие.
Элементами действия по получению подэлемента Эфи** 2. — Класс переменной, являются Э1. Функция получения значения переменной и Э2. Функция задания значения переменной. Функции данного действия Ф1. «Задать функцию получить значение» и Ф2. «Задать функцию задать значение», а инструментом является структура класса. Описанные действия показаны на рис. 4.
Элементами действия по получению подэлемента Эфи** 3. — Класс операции, являются Э1. Имя класса, Э2. Метод выполнения операции и Э3. Атрибуты метода выполнения операции. Функции данного действия Ф1. Объявить класс, Ф2. Задать Метод выполнения операции, Ф3. Передать Атрибуты метода выполнения операции. Инструментом также как и в предыдущих двух действиях является И**1 -«Структура класса».
Описанные действия показаны на рис. 5.
Цель Элемент Функция Инструмент
Сопоставления алгебры классовой структуре Эфи1.1.1 Часть формулы Эфи1.1.2. Тип элемента формулы (Эфи* 1. — Алгебраическая константа Эфи* 2. — Алгебраическая переменная Эфи* 3. — Алгебраическая операция) Эфи1.1.3. Типы классов (Эфи** 1. — Класс константы Эфи** 2. — Класс переменной Эфи** 3. — Класс операции) Ф1. Выбор типа элемента И1. Правила сопоставления: 1) Если часть формулы — число, то выбрать кл асс -константу 2) Если часть формулы — латинская буква, то класс — переменная. 3) Если часть формулы — математическая операция, то класс — операция.
Рис. 3. Механизм действия
Цель Элемент Функция Инструмент
Определение Типа класса (Дня Эфи** 2. — Класс переменной) Э1. Функция получения значения переменной Э1. Функция задания значения переменной (Дня Эфи** 3. — Класс операции) 31. Имя класса 32. Метод выполнения операции 33. Атрибуты метода выполнения операции (Для Эфи** 2. — Класс переменной) Ф1. Задать функцию получить значение Ф2. Задать функцию задать значение (Для Эфи** 3. — Класс операщи) Ф1. Объявить класс Ф2. Задать Метод выполнения операции Ф3. Передать Атрибуты метода выполнения операции И**1. Структура класса
Рис. 4. Механизм действия получения элемента Типы классов
Цель Элемент Функция Инструмент
Получение структуры класса 31. Объект класса. 32. Экземпляр класса Ф1. Методы класса И1. Синтаксис языка про граммирования
Рис. 5. Механизм действия получения инструмента Структура класса
На рис. 2-5 представлены действия программиста, которые ему необходимо совершить для того, чтобы реализовать определенный тип математических операции на языке программирования. Согласно описанной структуре были созданы программы, реализующие выполнение математических операций на языках Python и Java [6-8].
Анализ реализации математических операций на языках высокого уровня. Была произведена попытка реализовать описанную ранее систему действия, при этом структурными элементами программы также являются механизмы действия, поэтому необходимо определить, какие объекты языка программирования позволяют нам реализовывать эти действия. По модели действия (рис. 1, 2, 3) проанализируем объекты абстракции рассматриваемых языков, которые необходимы для выполнения того или иного типа действия. Для этого построим табл. 1, в которой показаны различия между рассматриваемыми языками путем перечисления объектов их языковых абстракций на примере выполнения типа действия «Программирование операции умножения».
Так как на двух языках была реализована одна и та же программа, она предъявляет одинаковый набор требований ко всем языкам. Такой прием сужает область сравнения, но делает ее однородной. Кроме того, для каждого языка было проанализировано несколько отдельных реализаций программы, подготовленных различными программистами. Групповой подход имеет два преимущества. Во-первых, сглаживаются различия между отдельными программистами, которые могут лишить достоверности любые сравнения, основанные на единственном «образце» для каждого языка. Во-вторых, появляется возможность сравнить изменчивость характеристик программ, составленных на разных языках.
В ходе сравнительного исследования сопоставлялись различные аспекты каждого языка. Основными критериями анализа языков программирования применительно к решаемой задаче являются следующие: динамическая типизация, сложность реализации программы в веб, и вместе с тем, сложность веб-фреймворка, объектно-ориентированные возможности.
При объявлении какой-либо переменной мы используем конструкции языка программирования — это есть не что иное, как абстракции языка программирования. Для рассматриваемых языков эти абстракции разные.
Языковые абстракции объявления переменной, константы, операции в Java подразумевают, что для каждого типа данных (вещественный, целый и т.д.) необходимо использовать определенный тип абстракции языка программирования. Эта ситуация продемонстрирована на рис. 4 и в табл. 1.
Например, для действия составления классовой структуры программы одним из элементов является класс переменной, который в Java необходимо использовать несколько раз для описания переменных разного типа (вещественный, целый и т.д.), а в Python необходимо описать этот класс только единственной языковой абстракцией, и в ходе выполнения программа сама определяет какой тип данных используется, что заложено в правилах языковой абстракции. Т.е. в языке Python, например, для объявления переменной любого типа используется один класс, а в языке Java для каждого типа переменных необходимо было создавать отдельный класс, которых на данных момент имеется три.
Таблица 1
Сравнение языковых абстракций языков программирования на примере нескольких типов действий
Тип дей- Python Java
ствия Компоненты действия Объекты абстракции языка программирования Компоненты действия Подтип действия Объекты абстракции языка программирования
Программирование операции умножения Элементы Переменные Элементы Умножение целых чисел Переменная int
Умножение вещественных чисел Переменная float
Функции Класс языка Функции Умножение целых чисел Класс сложения целых чисел
Умножение вещественных чисел Класс сложения вещест-вен-ных чисел
В правилах использования языковых абстракций каждого из рассматриваемых языков наблюдается свойство динамической типизации и от этих правил зависит длина кода создаваемой программы.
Заключение. Получена структура выполнения арифметической операции. Была создана базовая абстракция для выполнения арифметических операций на языке программирования высокого уровня. Предполагается, что любой пользователь, заполнив ее своим собственным содержанием, может выполнять различные по сложности арифметические операции.
Для создания более сложных программ, информационных систем необходим набор таких базовых абстракций, каждая из которых будет предназначен для выполнения различных действий. Но все эти базовые абстракции будут связаны между собой, будут взаимопроникать [9, 10, 11].
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Рогозов Ю.И. Методология создания субъектно-ориентированных систем // Информатизация и связь. — 2014. — № 2. — C. 6-10.
2. Rogozov Yu.I., Sviridov A.S. The Concept of Methodological Information Systems Development // Proceedings of IEEE 8th International Conference on Application of Information and Communication Technologies — AICT2014. IEEE Catalog Number CFP1456H-PRT. ISBN: 978-1-4799-4120-92. — P. 120-123.
3. Sergey Kucherov, Alexander Sviridov, S.A. Belousova. The formal model of structure-independent databases // Proceedings of 3rd International Conference on Data Management Technologies and Applications, Vienna, Austria, Scitepress — Science and Technology Publications. ISBN: 978-989-758-035-2. — P. 146-152.
4. Alexander Sviridov, Andrey Grishchenko, Svetlana Belousova. Performance estimation of selecting and inserting procedures in the structure-independent database // Proceedings of IEEE 8th International Conference on Application of Information and Communication Technologies — AICT2014. IEEE Catalog Number CFP1456H-PRT. ISBN: 978-1-4799-4120-92. — P. 202-207.
5. Yu.I. Rogozov, A.S. Sviridov and A.N. Belikov. Method of a Structure-Independent Databases Design in Configurable Information Systems // Proceedings of 3rd International Conference on Data Management Technologies and Applications, Vienna, Austria, Scitepress — Science and Technology Publications. ISBN: 978-989-758-035-2. — P. 139-145.
6. Django vs Flask vs Pyramid: Choosing a Python Web Framework. [Электронный ресурс] -Режим доступа: https://www.airpair.com/ python/posts/django-flask-pyramid.
7. Languages Versus D. [Электронный ресурс] — Режим доступа: http://www.prowiki.org/ wiki4d/wiki.cgi?LanguagesVersusD.
8. Васильев А.Н. Java: объектно-ориентированное программирование: Учебное пособие.
— СПб.: Питер, 2011. — C. 19.
9. Sviridov A., Lipko Y., Belikov A. Approach to automatized formation of workplaces structure in configurable information systems // Proceedings of «8th International С onference on Application of Information and Communication Technologies» (AICT-2014), Astana, Kazakhstan, ISBN: 978-1-4799-4120-92. 2014. — P. 383-386.
10. Белоусова С.А., Рогозов Ю.И. Анализ подходов к созданию пользовательского интерфейса // Известия ЮФУ. Технические науки. — 2014. — № 6 (155). — С. 142-148.
11. Беликов А.Н. Обзор и анализ методов и средств проектирования конфигурируемых информационных систем // Известия ЮФУ. Технические науки. — 2014. — № 6 (155).
— С. 137-141.
REFERENCES
1. Rogozov Yu.I. Metodologiya sozdaniya sub»ektno-orientirovannykh sistem [The methodology for the creation of subject-oriented systems], Informatizatsiya i svyaz’ [Informatization and communication], 2014, No. 2, pp. 6-10.
2. Rogozov Yu.I., Sviridov A.S. The Concept of Methodological Information Systems Development, Proceedings of IEEE 8th International Conference on Application of Information and Communication Technologies — AICT2014. IEEE Catalog Number CFP1456H-PRT. ISBN: 978-1-4799-4120-92, pp. 120-123.
3. Kucherov S., Sviridov A., Belousova S.A. The formal model of structure-independent databases, Proceedings of 3rd International Conference on Data Management Technologies and Applications, Vienna, Austria, Scitepress — Science and Technology Publications. ISBN: 978989-758-035-2, pp. 146-152.
4. Sviridov A., Grishchenko A., Belousova S. Performance estimation of selecting and inserting procedures in the structure-independent database, Proceedings of IEEE 8th International Conference on Application of Information and Communication Technologies — AICT2014. IEEE Catalog Number CFP1456H-PRT. ISBN: 978-1-4799-4120-92, pp. 202-207.
5. Rogozov Yu.I., Sviridov A.S. and Belikov A.N. Method of a Structure-Independent Databases Design in Configurable Information Systems, Proceedings of 3rd International Conference on Data Management Technologies and Applications, Vienna, Austria, Scitepress — Science and Technology Publications. ISBN: 978-989-758-035-2, pp. 139-145.
6. Django vs Flask vs Pyramid: Choosing a Python Web Framework. Available at: https://www.airpair.com/ python/posts/django-flask-pyramid.
7. Languages Versus D. Available at: http://www.prowiki.org/wiki4d/wiki.cgi?Languages VersusD.
8. Vasil’ev A.N. Java: ob»ektno-orientirovannoe programmirovanie: Uchebnoe posobie [Java: object-oriented programming: a tutorial]. St. Petersburg: Piter, 2011, pp. 19.
9. Sviridov A., Lipko Y., Belikov A. Approach to automatized formation of workplaces structure in configurable information systems, Proceedings of «8th International Conference on Application of Information and Communication Technologies» (AICT-2014), Astana, Kazakhstan, ISBN: 978-1-4799-4120-92. 2014, pp. 383-386.
10. Belousova S.A., Rogozov Yu.I. Analiz podkhodov k sozdaniyu pol’zovatel’skogo interfeysa [Analysis of approaches to user interface building], Izvestiya YuFU. Tekhnicheskie nauki [Izvestiya SFedU. Engineering Sciences], 2014, No. 6 (155), pp. 142-148.
11. Belikov A.N. Obzor i analiz metodov i sredstv proektirovaniya konfiguriruemykh informatsionnykh system [Review and analisys of methods and tools of configurable information systems design], Izvestiya YuFU. Tekhnicheskie nauki [Izvestiya SFedU. Engineering Sciences], 2014, No. 6 (155), pp. 137-141.
Статью рекомендовал к опубликованию д.т.н., профессор В.Н. Иванченко.
Беликов Александр Николаевич — Южный федеральный университет; e-mail: [email protected]; 347928, г. Таганрог, пер. Некрасовский, 44; кафедра САиТ; аспирант; ассистент.
Белоусова Светлана Алексеевна — e-mail: [email protected]; кафедра САиТ; аспирант; ассистент.
Борисова Елена Александровна — e-mail: [email protected]; кафедра САиТ; к.т.н.
Belikov Alexandr Nikolaevich — Southern Federal University; e-mail: [email protected]; 44, Nekrasovskiy, Taganrog, 347928, Russia; the department of system analysis and telecommunications; postgraduate student; assistant.
Belousova Svetlana Alekseevna — e-mail: [email protected]; the department of system analysis and telecommunications; postgraduate student; assistant.
Borisova Elena Aleksandrovna — e-mail: [email protected]; the department of system analysis and telecommunications; cand. of eng. sc.; associate professor.
Что такое абстракция в ООП? Абстрактный класс и метод Java
Что такое абстракция в ООП?
Абстракция — это концепция объектно-ориентированного программирования, которая «показывает» только важные атрибуты и «скрывает» ненужную информацию. Основная цель абстракции — скрыть от пользователей ненужные детали. Абстракция — это выбор данных из большего пула, чтобы показать пользователю только релевантные детали объекта. Это помогает снизить сложность программирования и усилия.Это одна из важнейших концепций ООП.
Щелкните здесь, если видео недоступно
Давайте изучим абстракцию в ООП на примере:
Предположим, вы хотите создать банковское приложение, и вас просят собрать всю информацию о вашем клиенте. Есть вероятность, что вы получите следующую информацию о клиенте
Абстракция в JavaНо не вся указанная выше информация требуется для создания банковского приложения.
Итак, вам нужно выбрать только полезную информацию для вашего банковского приложения из этого пула. Такие данные, как имя, адрес, налоговая информация и т. Д., Имеют смысл для банковского приложения, которое является примером абстракции в ООП
Поскольку мы извлекли / удалили / выбрали информацию о клиенте из более крупного пула, этот процесс называется абстракцией в ООП. .
Однако одна и та же информация после извлечения может использоваться для широкого круга приложений. Например, вы можете использовать одни и те же данные для заявления в больницу, приложения портала вакансий, правительственной базы данных и т. Д.с небольшими изменениями или без них. Следовательно, они становятся вашими основными данными. Это преимущество абстракции в ООП.
Разница между абстракцией и инкапсуляцией
Абстракция | Инкапсуляция |
Абстракция в объектно-ориентированном программировании решает проблемы на уровне проектирования. | Инкапсуляция решает уровень реализации. |
Абстракция в программировании — это скрытие нежелательных деталей при отображении наиболее важной информации. | Инкапсуляция означает связывание кода и данных в единый блок. |
Абстракция данных в Java позволяет сосредоточиться на том, что информационный объект должен содержать. | Инкапсуляция означает скрытие внутренних деталей или механизмов того, как объект что-то делает, по соображениям безопасности. |
Разница между абстрактным классом и интерфейсом
Абстрактный класс | Интерфейс |
Абстрактный класс может иметь как абстрактные, так и не абстрактные методы. | Интерфейс может иметь только абстрактные методы. |
Он не поддерживает множественное наследование. | Поддерживает множественное наследование. |
Он может обеспечить реализацию интерфейса. | Не может обеспечить реализацию абстрактного класса. |
Абстрактный класс может иметь защищенные и абстрактные общедоступные методы. | Интерфейс может иметь только открытые абстрактные методы. |
Абстрактный класс может иметь конечную, статическую или статическую конечную переменную с любым спецификатором доступа. | Интерфейс может иметь только общедоступную статическую конечную переменную. |
Что такое абстрактный класс?
Абстрактный класс — это тип класса в ООП, который объявляет один или несколько абстрактных методов. Эти классы могут иметь как абстрактные, так и конкретные методы. У нормального класса не может быть абстрактных методов. Абстрактный класс — это класс, который содержит по крайней мере один абстрактный метод.
Что такое абстрактные методы?
Абстрактный метод — это метод, который имеет только определение метода, но не содержит реализации.Метод без тела известен как абстрактный метод. Он должен быть объявлен в абстрактном классе. Абстрактный метод никогда не будет окончательным, потому что абстрактный класс должен реализовывать все абстрактные методы.
Преимущества абстракции
- Основное преимущество использования абстракции в программировании состоит в том, что она позволяет группировать несколько связанных классов как братьев и сестер.
- Абстракция в объектно-ориентированном программировании помогает снизить сложность процесса проектирования и реализации программного обеспечения.
Когда использовать абстрактные методы и абстрактный класс?
Абстрактные методы обычно объявляются там, где два или более подкласса также делают одно и то же по-разному с помощью разных реализаций. Он также расширяет тот же абстрактный класс и предлагает различные реализации абстрактных методов.
Абстрактные классы помогают описывать общие типы поведения и иерархию классов объектно-ориентированного программирования. Он также описывает подклассы, чтобы предложить детали реализации абстрактного класса.
Резюме:
- Абстракция в программировании — это процесс выбора важных наборов данных для объекта в вашем программном обеспечении и исключения незначительных.
- После того, как вы смоделировали свой объект с помощью абстракции данных в Java, один и тот же набор данных можно было бы использовать в разных приложениях.
Абстракция на Java | Dariawan
Абстракция — это концепция, позволяющая справляться со сложностью, скрывая от пользователя ненужные детали.Это позволяет пользователю реализовать более сложную логику поверх предоставленной абстракции, не понимая и даже не задумываясь обо всей скрытой сложности. Это также увеличивает безопасность приложения, поскольку пользователю предоставляются только важные детали. Если использовать аналогию с рестораном, важно, чтобы еда была подана, а не о том, как работает кухня.
В программировании мы применяем то же значение абстракции, создавая классы, не связанные с каким-либо конкретным экземпляром.В Java абстракция достигается с помощью абстрактных классов и интерфейсов .
Абстракция выполняется, когда нам нужно только наследовать от определенного класса, но не нужно создавать экземпляры объектов этого класса. В таком случае базовый класс можно считать «неполным». Такие классы известны как «абстрактный класс ».
Вот некоторые важные моменты об абстрактном классе:
- Абстрактный класс не может быть создан; это означает, что объект этого класса не может быть создан.
- Когда-то класс, имеющий ключевое слово abstract в некоторых из своих методов (или во всех), известен как абстрактный класс .
- Абстрактный метод абстрактного класса не имеет реализации.
- Абстрактный класс содержит методы, но фактическая реализация этих методов выполняется в подклассе.
Давайте проверим пример кода ниже:
У нас есть 2 метода в классе Animal , метод sound () не имеет реализации; поэтому он объявлен как «абстрактный» , в то время как метод getSpecies () имеет свою реализацию, а не абстрактную.Поскольку класс Animal имеет один абстрактный метод, класс должен быть объявлен как «abstract» .
В подклассе ( Cat class) метод sound () имеет реализацию. Поскольку метод завершен, это зависит от дизайна, если класс завершен и может быть создан или может быть помечен как abstract , чтобы предотвратить создание экземпляра и необходимость расширения в подклассе.
Подробнее в абстрактном классе в Java.
Интерфейсиспользуется для достижения абстракции и множественного наследования в Java.Интерфейс может иметь методы и переменные, как и класс, но методы, объявленные в интерфейсе, по умолчанию являются абстрактными *. Кроме того, переменные, объявленные в интерфейсе, по умолчанию являются общедоступными, статическими и окончательными *.
У нас есть один «абстрактный» метод в интерфейсе Eatable, метод diet (). Производный класс ( Dog class) реализует Eatable и реализуют метод diet () (конкретная реализация с телом). В то же время класс Dog также расширяет класс Animal, поэтому класс Dog (необязательно) может реализовать метод sound () или выбрать abstract .
Подробнее о интерфейсах в Java.
Когда использовать абстрактные классы
абстрактный класс, в предоставляет больше структуры. Обычно он определяет некоторые реализации по умолчанию и предоставляет некоторый поток, полезный для полной реализации. Программисту нужно расширить этот класс и предоставить (более) конкретную реализацию. Загвоздка в том, что код, использующий его, должен использовать ваш класс в качестве базового, а Java допускает только один базовый класс
Когда использовать интерфейсы
Напротив, производный класс может реализовывать несколько интерфейсов.Интерфейс позволяет кому-то начать с нуля, чтобы реализовать ваш интерфейс или реализовать ваш интерфейс в каком-либо другом коде, первоначальная или основная цель которого сильно отличалась от вашего интерфейса. Программист полностью контролирует их интерпретацию и реализацию интерфейса. Недостатком является то, что каждый метод в интерфейсе должен быть реализован и должен быть общедоступным.
Проверьте статью об абстрактном классе и интерфейсе.
Использование обоих
Конечно, программист может использовать оба.Подкласс может быть расширен от одного абстрактного базового класса для обеспечения структуры, но в то же время может реализовывать несколько интерфейсов.
Но имейте в виду, что одна из частых проблем в ООП — это чрезмерный дизайн. При объектно-ориентированном дизайне необходимо уравновесить несколько сил. Большая часть объектно-ориентированного проектирования направлена на снижение сложности и управление ею. Итак, если мы получаем чрезмерно сложный дизайн, а не иначе (снижение сложности), мы делаем это неправильно .
shiddiqeuy / Java-Abstraction: Пример ООП-абстракции в Java
GitHub — shiddiqeuy / Java-Abstraction: Пример ООП-абстракции в JavaПример абстракции ООП в Java
Файлы
Постоянная ссылка Не удалось загрузить последнюю информацию о фиксации.Тип
Имя
Последнее сообщение фиксации
Время фиксации
Пример абстракции ООП в Java
В ООП (объектно-ориентированное программирование) абстракция — это процесс, скрывающий детали реализации от пользователя, пользователю предоставляется только функциональность.
В Java абстракция достигается с помощью абстрактных классов и интерфейса. Абстрактный класс — это неполный класс. Вы не можете создать экземпляр абстрактного класса в Java. Они предоставляются для определения поведения по умолчанию и гарантируют, что клиент этого класса должен соблюдать те контракты, которые определены внутри абстрактного класса. Чтобы использовать его, вы должны расширить и реализовать их абстрактные методы.
, это репо будет легко реализовывать класс Employee Abstraction и Salary.
сначала мы создаем класс Employee как абстрактный затем мы расширяем класс зарплаты из сотрудника абстрактного класса мы запускаем класс AbstactDemo, чтобы узнать результат
результат ниже
Около
Пример абстракции ООП в Java
ресурсов
Вы не можете выполнить это действие в настоящее время.Вы вошли в систему с другой вкладкой или окном. Перезагрузите, чтобы обновить сеанс. Вы вышли из системы на другой вкладке или в другом окне. Перезагрузите, чтобы обновить сеанс.Java Abstraction — Javapapers
Последнее изменение: 7 сентября 2014 г., автор: Джо.
Абстракция — это концепция раскрытия только необходимых существенных характеристик и поведения по отношению к контексту.
Вчера я смотрела фильм «Мариан» на тамильском языке.Моя жена — ярая фанатка Дхануша, героя фильма. В душе Дхануш — сложный и напряженный актер. Но то, что вы видите, — это соседский мальчик, у вас возникает ощущение, что вы давно его хорошо знаете. Именно благодаря своим актерским способностям он абстрагируется от своего сложного «я» и демонстрирует подходящее количество, необходимое на данный момент. Это абстракция 🙂
Слои абстракции
Когда мы случайно видим красивую машину на дороге, мы видим полную картину.Автомобиль как единое целое, транспортное средство. Мы не видим лежащего в основе сложного машиностроения.
Теперь представьте, что мы идем в автосалон, чтобы купить машину. Что мы видим сейчас? Мы видим четыре колеса, мощный двигатель, гидроусилитель руля и т. Д. Мы видим машину на высоком уровне комплектующих. Но внутри так много всего, что придает автомобилю завершенность.
Теперь рассмотрим механика, который будет обслуживать машину. Он увидит еще один уровень глубже с большим уровнем информации.
При разработке программного обеспечения мы учитываем контекст. В приведенном выше примере мы задаемся вопросом, проектируем ли мы программное обеспечение для привлечения внимания зрителя, покупателя или механика? Соответственно, в дизайне применяются уровни абстракции.
Абстракция в ООП
В общем программном обеспечении, когда мы говорим об абстракции, сам язык программного обеспечения является примером концепции абстракции. Когда мы пишем заявление как,
а = Ь + с;
мы добавляем два значения, хранящиеся в двух местах, а затем сохраняем результат в новом месте.Мы просто описываем это в доступной для человека форме. Что происходит внизу? Здесь задействованы регистры, наборы команд, счетчики программ, блоки памяти и т. Д. Происходит PUSH, POP. Мы используем язык высокого уровня, чтобы абстрагировать эти сложные детали.
Когда мы говорим об абстракции в Java, мы говорим об абстракции в объектно-ориентированном программировании (ООП) и о том, как это делается в Java. Концепция абстракции в ООП начинается прямо в момент зарождения класса. Я не буду говорить, что использование модификаторов доступа Java для ограничения свойств объекта само по себе является абстракцией.Это еще не все. Абстракция применяется везде в программном обеспечении и ООП.
Абстракция и инкапсуляция
Когда класс концептуализируется, какие свойства мы можем иметь в нем с учетом контекста. Если мы проектируем класс Animal в контексте зоопарка, важно, чтобы у нас был атрибут animalType для описания домашних или диких животных. Этот атрибут может не иметь смысла, когда мы проектируем класс в другом контексте.
Точно так же, как мы будем вести себя в классе? Здесь также применяется абстракция.Что здесь необходимо иметь и при какой передозировке? Затем мы отключили часть информации из класса. В этом процессе применяется абстракция.
Когда мы спрашиваем о разнице между инкапсуляцией и абстракцией, я бы сказал, что инкапсуляция использует абстракцию как концепцию. Итак, это только инкапсуляция. Нет, абстракция — это даже концепция, применяемая как часть наследования и полиморфизма.
Мы должны рассмотреть абстракцию на более высоком уровне среди других концепций ООП: инкапсуляции, наследования и полиморфизма.
Абстракция и наследование
Давайте также возьмем наследование в этом обсуждении. Когда мы проектируем иерархию классов, мы применяем абстракцию и создаем несколько уровней между каждой иерархией. Например, пусть будет класс Cell первого уровня, следующим уровнем будет LivingBeing, а следующим уровнем — Animal. Иерархия, которую мы создаем на основе контекста, для которого мы программируем, сама использует абстракцию. Затем для каждого уровня, какие свойства и поведение мы собираемся иметь, абстракция снова играет здесь важную роль в принятии решения.
Какие общие свойства можно раскрыть и повысить до более высокого уровня, чтобы классы более низкого уровня могли наследовать их. Некоторые свойства не нужно хранить на более высоком уровне. Этот процесс принятия решений — не что иное, как применение абстракции для создания различных уровней иерархии. Итак, абстракция — один из ключевых аспектов ООП как концепции.
Абстракция на Java
Прочитав приведенный выше раздел, вы, возможно, пришли к пониманию того, как абстракция выполняется в Java.
- Когда мы концептуализируем класс
- Когда мы пишем «интерфейс»
- Когда мы пишем «абстрактный» класс, метод
- Когда мы пишем «расширяет»
- Когда мы применяем такие модификаторы, как «частный»,…
во всех этих областях мы используем абстракцию как понятие. Я думаю, что пример Java-кода для всего вышеперечисленного очень тривиален. Если вам сложно понять абстракцию, задавайте свой вопрос в разделе комментариев, я с радостью отвечу на него.
Java Abstraction | КодыDope
В этой главе мы узнаем о другой важной концепции объектно-ориентированного программирования — абстракции. В этой главе мы узнаем только о концептуальной части абстракции, а в следующих двух главах мы реализуем ее. Итак, приступим.
Абстракция в целом
Слово « абстракция » означает нечто теоретическое без конкретного существования.Для примера из реальной жизни даже автомобиль — это абстракция. Если вы хотите задействовать тормоз, вы нажимаете педаль тормоза, а если вы хотите ускориться, вы нажимаете педаль акселератора. Но знаете ли вы, как скорость автомобиля уменьшается при нажатии на педаль тормоза или увеличивается при нажатии на педаль акселератора? Без прав? Итак, процесс работы педалей не имеет конкретного существования в соответствии с нашими знаниями, но у нас есть теоретическая идея, что использование этой педали каким-то образом увеличивает или уменьшает скорость автомобиля.
Сокращение, абстракция упрощает нам жизнь.Нам доступна только функциональность (функции тормоза и акселератора в приведенном выше примере), и весь сложный процесс этой функции происходит под капотом. И здесь мы, программисты, также используем слово абстракция, и это даже основная часть объектно-ориентированного программирования.
Давайте поймем слово аннотация применительно к программированию.
Абстракция в программировании
Думая о программировании, где нам просто нужно использовать представленный нам способ для выполнения некоторого действия, первое, что приходит в голову, — это метод.Мы просто вызываем метод, и он выполняет свое действие. В случае методов, написанных другими программистами, или, например, встроенных методов, таких как println, мы не знаем, как это работает. Мы просто знаем, что будет делать этот метод, и используем его для выполнения этого действия. Это абстракция в программировании.
До этого момента кажется, что методы — единственный способ абстракции, но есть и другие примеры, например, мы используем несколько команд, которые доступны нам для взаимодействия с базой данных, и весь процесс происходит под капотом.
Давайте посмотрим на некоторые концептуальные примеры термина «абстракция».
- Предположим, программист хочет использовать значение числа пи в программе. Таким образом, он может присвоить значение 3,14 переменной с именем Pi и использовать эту переменную во всей программе. Таким образом, он скрыл действительное числовое значение числа Пи и использовал только переменную Пи, поскольку фактическое числовое значение не требуется запоминать. Здесь он достиг абстракции, скрыв значение Пи.
- Предположим, что программист написал метод с именем
drawRectangle
для рисования прямоугольника.Теперь, когда ему или любому другому программисту нужно нарисовать прямоугольник, он может просто вызвать методdrawRectangle ()
, не зная кода реализации внутри метода. Здесь он также добился абстракции, скрыв реализацию метода. - Когда мы используем какой-либо встроенный метод, например
System.out.println ()
, мы знаем, что этот метод принимает какой-то аргумент и выводит что-то на экран. Но мы не знаем его реализации, то есть как он это делает. Вся эта реализация скрыта, и Java просто предоставляет нам метод и говорит нам, как его использовать.Так же, как Java, просто предоставляет нам встроенные методы и сообщает нам только об их использовании, не сообщая о деталях реализации, как программист, мы также должны предоставлять пользователю только необходимые функции, скрывая все ненужные детали реализации.
Во всех приведенных выше примерах нам удалось добиться абстракции и снизить сложность кода. Итак, в программировании мы можем достичь абстракции разными способами.
Однако, когда мы говорим об абстракции, мы обычно имеем в виду абстракцию на уровне дизайна в программировании.Абстракция на уровне дизайна означает использование абстракции для улучшения структуры нашего кода, делая его менее сложным и более масштабируемым. Давайте узнаем об абстракции на уровне дизайна и о том, что особенного в структурировании нашего кода.
Абстракция на уровне дизайна
До сих пор концептуальный смысл абстракции должен быть ясен. В объектно-ориентированном программировании концепция абстракции особенно используется для улучшения дизайна классов и подклассов. В соответствии с ним мы определяем суперкласс или абстрактный суперкласс с целью, чтобы он служил определением, а наследующие его подклассы будут реализовывать это определение, чтобы сделать что-то значимое.Например, транспортное средство — это теоретическое определение того, что мобильное, и люди могут использовать его для путешествий. Но это определение оживает только после того, как что-то вроде автомобиля, мотоцикла и т. Д. Использует его для создания чего-то значительного.
Давайте мыслить объектно. Абстрактный суперкласс Vehicle — это всего лишь определение, поэтому нет необходимости создавать из него объекты, мы сделаем объекты его подклассами — Car, Bike и т. Д. И у него есть некоторые методы, такие как moveForward
, moveBackward
, turnLeft
и поворачивают вправо
, чтобы обеспечить необходимую мобильность.Но способ реализации этого метода, то есть способ движения велосипеда и автомобиля, будет другим. Таким образом, эти методы будут определены по-разному для разных подклассов. Это означает, что абстрактный суперкласс будет указывать только то, что эти методы должны присутствовать во всех его подклассах, но они будут определяться индивидуально самими подклассами.
Это означает, что абстракция похожа на простое наследование, но с большим количеством ограничений, так что определение суперкласса строго соблюдается среди подклассов.
Из приведенного выше примера ясно, что суперкласс будет служить только как определение, и мы не будем создавать объекты самого суперкласса. Во-вторых, суперкласс будет содержать только объявления методов, а их определения будут присутствовать в самих подклассах.
Это также реализует концепцию абстракции еще одним способом, то есть мы уверены, что эти методы будут присутствовать во всех подклассах конкретного абстрактного суперкласса, и мы можем напрямую использовать их, не беспокоясь об их реализации в разных подклассах.Возьмем еще один пример класса Shape. Абстрактный класс должен определять структуру для своих подклассов. Итак, абстрактный класс имеет объявления методов без их тел, и все его подклассы должны иметь эти методы с их определениями в соответствии с самими подклассами.
Суперкласс Shape будет указывать, что все его подклассы будут иметь методы getPerimeter
и getArea
, но поскольку класс Shape считается самим собой, у нас нет определения для площади и периметра.
Теперь предположим, что классы Circle и Rectangle наследуют класс Shape. У этих классов будут собственные определения для getArea
и getPerimeter
.
Таким образом, у нас есть ограниченная структура в нашем суперклассе, и все методы должны быть определены в подклассах, чтобы их можно было классифицировать как подкласс абстрактного суперкласса. Итак, суперкласс действует как теоретическое определение, а подклассы реализуют это определение, чтобы сделать это определение доступным для пользователей.
Подведем итоги абстракции на уровне дизайна. Суперкласс должен содержать только определение. Таким образом, нет необходимости создавать объекты самого суперкласса. Вместо этого у нас будут подклассы и создавать их объекты. Теперь, чтобы сделать суперкласс полностью абстрактным, все его методы не должны иметь определений тела. Таким образом, мы будем уверены, что все необходимые методы определены в соответствии с потребностями отдельных подклассов.
В Java абстракция на уровне дизайна может быть достигнута двумя способами:
- Абстрактный класс
- Интерфейс
Мы обсудим это в следующих главах.Использование абстракции На этом уровне невозможно объяснить использование и зачем нам нужна абстракция, потому что это концепция уровня дизайна. После изучения программирования, при написании кода в реальных проектах, то, как мы пишем наш код или как мы структурируем наш код, становится очень важным, и здесь нам нужна абстракция.
А пока вы можете понять это на примере автомобиля, который мы уже обсуждали. Есть много способов реализовать то, что мы делали раньше.Но создайте абстрактный класс Vehicle, гарантирующий, что все его подклассы, созданные нами или другими программистами, будут иметь 4 метода — moveForward
, moveBackward
, turnLeft
и turnRight
. Это означает, что мы можем использовать эти методы для объектов любого из подклассов. Это более чистый способ написания кода, который также упрощает наш код.
Давайте разберемся с абстрактными классами, одним из способов достижения абстракции в Java.
Вы живете только один раз, но если вы все делаете правильно, достаточно одного раза.
— Мэй Уэст
Java Abstract Class — Linux Hint
Концепция абстракции состоит в том, чтобы выделить задачу объекта вместо того, чтобы выделять, «как объект выполняет задачу». Этот тип концепции может быть реализован в Java двумя способами. Это абстрактный класс и интерфейс. Абстрактный класс содержит ключевое слово abstract . Этот класс не может быть инициирован, как другие обычные классы, но подкласс может быть получен путем наследования абстрактного класса.Доступ к функциям абстрактного класса можно получить, создав объект подкласса. Абстрактный класс также может содержать конструктор, к которому можно получить доступ, создав объект класса подкласса. В этом руководстве показано, как можно использовать абстрактный класс в Java.Синтаксис:
абстрактный класс className {
имя_переменной;
абстрактный метод1 ();
public method2 () {
операторов 1..N
}
}
Абстрактный класс может содержать атрибут или переменные, абстрактный метод и нормальный метод или любой из них.Но подкласс абстрактного класса может реализовывать только абстрактный метод абстрактного класса.
Пример-1: Абстрактный класс с открытым методом
В следующем примере показано, как можно объявить абстрактный класс с помощью общедоступного метода и способ использования абстрактного класса путем создания подкласса. Здесь абстрактный класс содержит общедоступный метод с именем details () , который реализован внутри абстрактного класса. Объект подкласса создается для доступа к общедоступному методу абстрактного класса.
// Определение абстрактного класса с помощью общедоступного методакнига абстрактных классов {
общедоступные сведения о недействительности () {
System.out.println («Название книги: выучите PHP за 15 минут»);
System.out.println («Имя автора: Джейк Райт»);
System.out.println («Цена со скидкой: 35 долларов США»);
}
}
// Определение подкласса
class php extends book {
}
// Основной класс
class abstract1 {
public static void main (String [] args) {
php bk = new php ();
bk.подробности();
}
}
Выход:
После запуска кода появится следующий вывод. Здесь вызывается метод details () абстрактного класса, и текст печатается из метода.
Пример-2: Абстрактный класс с абстрактным методом и общедоступным методом
В следующем примере показано, как можно объявить абстрактный класс с переменными, абстрактным методом и общедоступным методом. Операторы общедоступного метода определены внутри абстрактного класса, но тело абстрактного метода пусто, что реализовано внутри подкласса абстрактного класса.Здесь два подкласса объявляются путем расширения абстрактного класса. Подкласс с именем square будет вычислять и печатать площадь квадрата на основе значения переменной n . Подкласс с именем rectangle будет вычислять и печатать площадь прямоугольника на основе значений переменных h и w . Открытый метод readData () вызывается параметром с именем type , чтобы определить, какие переменные абстрактного класса будут инициализированы.Значение переменной типа будет 1 для инициализации значения n и 2 для инициализации значения h и w.
// Определение абстрактного класса с абстрактным методом и общедоступным методомобласть абстрактного класса {
общедоступные int n, h, w;
абстрактный результат void ();
public void readData (тип int) {
если (введите == 1) {
n = 10;
}
еще {
h = 20;
w = 30;
}
}
}
// Определить квадрат подкласса
class square extends area {
public void result () {
// Вычислить площадь квадрата
int areaVal = n * n;
Система.out.println («Площадь квадрата равна» + areaVal);
}
}
// Определить подкласс прямоугольника
class rectangle extends area {
public void result () {
// Вычислить площадь прямоугольника
int areaVal = h * w;
System.out.println («Площадь прямоугольника равна» + areaVal);
}
}
// Главный класс
class abstract2 {
public static void main (String [] args) {
// Создаем объект квадратного класса
square sq = new square ();
кв.readData (1);
sq.result ();
// Создаем объект прямоугольника класса
rectangle rq = new rectangle ();
rq.readData (2);
rq.result ();
}
}
Выход:
После запуска кода появится следующий вывод. Выходные данные показывают площадь квадрата, где значение n равно 10 , и площадь прямоугольника, где значение h равно 20, , а значение w равно 30 .
Пример-3: Абстрактный класс с конструктором
В следующем примере показано, как можно объявить конструктор и использовать его в абстрактном классе. Конструктор абстрактного класса инициализирует значения a и b . Абстрактный метод maxval () реализован в подклассе findMax . super () Метод используется в конструкторе подкласса для вызова конструктора абстрактного класса.Абстрактный метод maxval () найдет максимальное значение из двух чисел, которые будут присвоены параметрам конструктора подкласса во время создания объекта.
// Определение абстрактного класса с конструкторомномеров абстрактных классов {
// объявляем переменные
защищенный конечный int a, b;
// конструктор абстрактного класса
общедоступные номера (int x, int y) {
this.a = x;
this.b = y;
}
// Открытый метод
публичная аннотация void maxval ();
}
// Определение подкласса
class findMax extends numbers {
// Конструктор подкласса
public findMax (int x, int y) {
// Вызов конструктора абстрактного класса
super (x, y);
}
// Реализуем абстрактный метод
public void maxval () {
if (a> b) {
System.out.println (a + «больше» + b);
}
else {
System.out.println (b + «больше» + a);
}
}
}
// Основной класс
class abstract3 {
public static void main (String [] args) {
// Создаем объект подкласса
findMax fmax = new findMax (34,89);
// Находим максимум
fmax.maxval ();
}
}
Выход:
После запуска сценария появится следующий вывод.Здесь 34 и 89 указаны как значения параметров конструктора. Эти значения сравниваются в абстрактном методе, который реализован в подклассе, и выводится следующее сообщение.
Вывод:
Абстрактный класс используется, чтобы сделать программу более организованной и понятной. Несколько связанных классов можно сгруппировать с помощью абстрактных классов. Концепция и реализация абстрактного класса с различными частями объясняются в этом руководстве на простых примерах.Я надеюсь, что читатели смогут понять использование абстрактного класса и правильно применить его в своем коде после прочтения этого руководства.
Абстракция | CoreJavaGuru
Скрытие информации
В информатике сокрытие информации — это принцип разделения проектных решений в компьютерной программе, которые, скорее всего, изменятся, таким образом защищая другие части программы от обширных модификаций в случае изменения проектного решения. Защита включает обеспечение стабильного интерфейса, который защищает оставшуюся часть программы от реализации (детали, которые, скорее всего, изменятся).
Скрытие информации — это способность предотвратить доступ к определенным аспектам класса или программного компонента для его клиентов с помощью функций языка программирования. Скрытие информации — это мощный метод программирования, поскольку он снижает сложность.
Скрытие информации — один из важнейших принципов ООП. Под «сокрытием информации» мы подразумеваем «отображение только тех деталей, которые необходимы внешнему миру, и сокрытие всех остальных деталей от внешнего мира.«
Примеры сокрытия информации в реальном мире
Давайте посмотрим на простой пример сокрытия информации:
Ваше имя и другая личная информация хранится в вашем мозгу, мы не можем получить доступ к этой информации напрямую. Чтобы получить эту информацию, мы должны спросить вас об этом, и вы сами решаете, какими подробностями вы хотели бы поделиться с нами.
В объектно-ориентированном подходе программирования у нас есть объекты с их атрибутами и поведением, которые скрыты от других классов, поэтому мы можем сказать, что объектно-ориентированное программирование следует принципу сокрытия информации.
С точки зрения объектно-ориентированного программирования, скрытие информации:
«Скрытие деталей объекта (состояния и поведения) от пользователей»
Здесь под пользователями мы подразумеваем «объект» другого класса.
Скрытие информации достигается в объектно-ориентированном программировании с использованием следующих принципов:
- Вся информация, относящаяся к объекту, хранится внутри объекта
- Он скрыт от внешнего мира
- Им можно управлять только самим объектом
Мы можем добиться сокрытия информации с помощью инкапсуляции и абстракции, поэтому давайте подробно рассмотрим эти две концепции.
Абстракция
Абстракция — это процесс сокрытия стиля работы объекта и отображения только необходимой информации об объекте в понятной форме.
Радиоприемник имеет тюнер, антенну, регулятор громкости и переключатель включения / выключения. Чтобы использовать его, вам не нужно знать, что антенна улавливает радиочастотные сигналы, преобразует их в электрические сигналы, а затем увеличивает их силу с помощью схемы высокочастотного усиления. Вам также не нужно знать, как результирующий ток фильтруется, усиливается и, наконец, преобразуется в звук.Вы просто включаете радио, настраиваетесь на нужную станцию и слушаете. Внутренние детали невидимы. Это отличная функция, потому что теперь радио может использовать каждый, а не только люди с техническими знаниями. Наем консультанта, который приходил к вам домой каждый раз, когда вы хотели послушать радио, обошелся бы очень дорого. Другими словами, вы можете сказать, что радио — это объект, который был спроектирован так, чтобы скрыть его сложность.
Abstraction определяет способ абстрагирования или скрытия ваших данных и членов от внешнего мира.Проще говоря, абстракция скрывает сложности вашего класса или структуры или в общем термине Тип от внешнего мира. Это достигается с помощью спецификаторов доступа.
Для меня абстракция — это то, как мы видим вещи, например, в моей машине, я никогда не знаю, сколько устройств используется в моем двигателе, как горит бензин, как система передач изменяет скорость моей машины, я знаю только это, когда я нажимаю педаль газа моя машина движется быстро, и когда я нажимаю кнопку тормоза, моя машина замедляется, и я могу регулировать скорость своей машины с помощью шестерен.
Точно так же в объектно-ориентированном мире мы всегда стараемся скрыть сложность системы от ее конечного пользователя, например У меня есть система чата, которая взаимодействует с другим клиентом чата. Затем я попытаюсь создать уровень абстракции, который скроет всю сложность протоколов TCP / IP и предоставит пользователю простые функции, такие как SendMessage или RecieveMessage.
Почему абстракция?
Одна из фундаментальных причин для участия в задаче абстракции при анализе, проектировании и разработке программного обеспечения состоит в том, чтобы снизить сложность до определенного уровня, чтобы можно было легко сформулировать и понять соответствующие аспекты требований, проектирования и разработки.
Определения:
Ниже приведены различные определения абстракции, которые вы могли бы использовать, если бы их спросили в интервью:
- Скрытие сложностей вашего шрифта от внешнего мира.
- Абстракция — это процесс скрытия стиля работы объекта и отображения только необходимой информации об объекте в понятной форме.
- Абстракция — это концепция раскрытия только необходимых существенных характеристик и поведения по отношению к контексту.
- Абстракция — это «для представления существенной функции без представления деталей фона».
- Абстракция позволяет сосредоточиться на том, что делает объект, а не на том, как он это делает.
- Абстракция предоставляет вам обобщенное представление ваших классов или объектов, предоставляя соответствующую информацию.
- Абстракция — это процесс сокрытия деталей реализации и отображения только функциональности.
Мой любимый: Абстракция позволяет вам сосредоточиться на том, что делает объект, а не на том, как он это делает.
Пример
[1] Вы знаете, что вам нужно нажать на ключи, переключить передачу и ускориться, чтобы управлять автомобилем, но знаете ли вы, что происходит, когда вы переключаете передачу и ускоряетесь, или говорите, как работает двигатель автомобиля? Вы этого не сделаете, и это просто, потому что вам не нужно знать всю эту сложность. Ваша работа — просто водить машину. Это то, что мы называем абстракцией.
[2] Давайте возьмем человека в качестве примера и посмотрим, как этот человек абстрагируется в различных ситуациях.
- Врач видит (реферат) человека как пациента.Врач интересуется именем, ростом, весом, возрастом, группой крови, предыдущими или имеющимися заболеваниями и т. Д. Человека.
- Работодатель видит (абстрагирует) человека как Сотрудника. Работодателя интересуют имя, возраст, состояние здоровья, степень образования, опыт работы и т. Д. Человека.
[3] Монитор ВКЛ / ВЫКЛ
Пользователю не нужно много знать обо всех функциях микросхем, которые происходят, когда Монитор включается или выключается. Все, что ему нужно знать, это функция ВКЛ. on функция OFF-Monitor выключена.
Слои / уровни абстракции
Уровень абстракции — это механизм, разделяющий две сложные системы. В вычислениях уровень абстракции или уровень абстракции — это способ скрыть детали реализации определенного набора функциональных возможностей, позволяя разделить задачи для облегчения взаимодействия и независимости от платформы или для модульного построения программной системы для последующего расширения.
Типичное видение компьютерной архитектуры как ряда уровней абстракции: аппаратное обеспечение, микропрограммное обеспечение, ассемблер, ядро, операционная система и приложения.
Пример
Когда мы случайно видим красивую машину на дороге, мы видим полную картину. Автомобиль как единое целое, транспортное средство. Мы не видим лежащего в основе сложного машиностроения.
Теперь представьте, что мы идем в автосалон, чтобы купить машину. Что мы видим сейчас? Мы видим четыре колеса, мощный двигатель, гидроусилитель руля и т. Д. Мы видим машину на высоком уровне комплектующих. Но внутри так много всего, что придает автомобилю завершенность.
Теперь рассмотрим механика, который будет обслуживать машину.Он увидит еще один уровень глубже с большим уровнем информации.
При разработке программного обеспечения мы учитываем контекст. В приведенном выше примере мы задаемся вопросом, проектируем ли мы программное обеспечение для привлечения внимания зрителя, покупателя или механика? Соответственно, в дизайне применяются уровни абстракции.
Абстракция в ООП
В общем программном обеспечении, когда мы говорим об абстракции, сам язык программного обеспечения является примером концепции абстракции.Когда мы пишем заявление как,
a = b + c;
мы добавляем два значения, хранящиеся в двух местах, а затем сохраняем результат в новом месте. Мы просто описываем это в доступной для человека форме. Что происходит внизу? Здесь задействованы регистры, наборы команд, счетчики программ, блоки памяти и т. Д. Происходит PUSH, POP. Мы используем язык высокого уровня, чтобы абстрагировать эти сложные детали.
Когда мы говорим об абстракции в Java, мы говорим об абстракции в объектно-ориентированном программировании (ООП) и о том, как это делается в Java.Концепция абстракции в ООП начинается прямо в момент зарождения класса. Я не буду говорить, что использование модификаторов доступа Java для ограничения свойств объекта само по себе является абстракцией. Это еще не все. Абстракция применяется везде в программном обеспечении и ООП.
Абстракция на Java
Прочитав приведенный выше раздел, вы, возможно, пришли к пониманию того, как абстракция выполняется в Java
.- Когда мы концептуализируем класс
- Когда мы пишем интерфейс
- Когда мы пишем абстрактный класс, метод
- Когда мы пишем, расширяется
- Когда мы применяем такие модификаторы, как private
Итак, когда вы используете абстракцию?
, когда вы знаете, что что-то должно быть там, но не знаете, как именно это должно выглядеть.
например когда я создаю класс под названием Vehicle, я знаю, что должны быть такие методы, как start () и Stop (), но не знаю механизма запуска и остановки каждого транспортного средства, поскольку они могут иметь разные механизмы запуска и остановки, например, некоторые могут запускаться ударом, или некоторые могут быть нажатием кнопок, та же концепция применима и к интерфейсу в Java.
, поэтому реализацию этих методов start () и stop () следует оставить их конкретной реализации, например. Скутер, мотоцикл, автомобиль и т. Д.
Интерфейс Java — это еще один способ предоставления абстракции. Интерфейсы по умолчанию являются абстрактными.
Где мы должны использовать абстрактный класс и где мы должны использовать интерфейсы Java?
, вы можете перейти на интерфейс java, если знаете только названия методов, которые должен иметь ваш класс e.грамм. для сервера он должен иметь методы start () и stop (), но мы не знаем, как именно эти методы start и stop будут работать.