#c #oop #header-files #code-reuse
#c #ооп #заголовочные файлы #повторное использование кода
Вопрос:
В интервью меня спросили, что, поскольку повторное использование является одним из основных преимуществ объектно-ориентированного программирования, но это также может быть достигнуто путем включения файлов заголовков на языке C? Итак, в чем разница в повторном использовании ООП и файлов заголовков C?
Комментарии:
1. Повторное использование ООП — это концепция, при которой вы можете повторно использовать существующий код, данные и классы, которые у вас есть. Файлы заголовков C — хороший пример применения ИТ, где потребители файлов заголовков могут использовать библиотеки в любое время, когда захотят
2. так в чем же разница? Есть ли какие-либо дополнительные преимущества в повторно используемом коде ООП по сравнению с заголовочными файлами?
3. файлы заголовков являются примером возможности повторного использования ООП..,
4. Кто когда-либо говорил, что повторное использование кода является исключительным для ООП? Вы можете повторно использовать код без ООП (хотя, конечно, детали того, как это достигается, могут отличаться). Каждый приличный проект функционального программирования делает это, и для этого написан некоторый процедурный код.
Ответ №1:
Если под «повторным использованием» вы просто подразумеваете, что код не нужно повторять в каждом модуле кода, то да, файл заголовков на C выполняет эту задачу, поскольку он позволяет использовать объявления функций и переменных, определенных с помощью внешней ссылки в одном модуле кода, в другом модуле кода без необходимости пользователю повторно вводить все эти объявления и / или пытаться поместить каждое определение каждой функции, которая обычно является частью библиотеки, в каждый модуль кода. Таким образом предотвращается дублирование кода.
Объектно-ориентированное программирование с использованием наследования и полиморфизма в таких языках, как C и Java, имеет аналогичный эффект … вы определяете интерфейс и / или базовый класс один раз, а затем вы можете «включить» этот код через наследование в другой класс. Кроме того, виртуальные методы наряду с полиморфизмом позволяют писать функции, которые принимают один тип базового класса в качестве аргумента, но вызывают код, который фактически определен в производном типе класса. По сути, это означает, что вы можете вызвать новый код (т. Е. ваш производный класс) в старом коде (т. Е. Функцию, которая приняла тип базового класса). Например, как разработчик библиотеки, вы могли бы определить набор типов / интерфейсов базового класса, и пользователь мог бы получить производные от этих базовых классов, но при этом эффективно использовать их в тех же функциях, которые были включены в библиотеку, которые принимают аргументы типа базового класса. Таким образом, вы не вынуждены дублировать эти функции… они все еще могут использоваться вашими «новыми» производными классами.
Ответ №2:
В принципе, без ООП и просто используя включенные заголовки, вы можете использовать существующую функцию без необходимости писать ее заново самостоятельно.
Однако, если вы намерены использовать очень похожую, но немного отличающуюся функцию, у вас нет выбора, кроме как написать ее самостоятельно. Вы не можете повторно использовать исходную функцию в этом случае, вам придется написать новую.
Преимущество ООП: если бы эта функция была классом, вы могли бы наследовать от нее и добавить только несколько небольших методов, так что вы можете повторно использовать большинство методов исходного класса.
Комментарии:
1. При наследовании для повторного использования кода отсутствует как точка наследования (отношение «есть»), так и гораздо больший источник повторного использования кода: полиморфизм.
2. но при наследовании вам также придется переписать код, если вы хотите другую реализацию, то есть переопределение. Таким образом, мы также можем сделать это здесь: включить файл заголовка, реализовать новый метод и использовать эту библиотеку везде с настраиваемой реализацией метода.
Ответ №3:
Здесь важно не путать языковую поддержку ООП и саму ООП. Обычной практикой для многократно используемого кода на Си является определение типов данных и функций, работающих с типами данных в файле заголовка, а затем реализация функций в терминах этих типов данных и функций. Если присмотреться, это реализация ООП, хотя и без надлежащей языковой поддержки и, следовательно, менее стабильная. Но: файл заголовка C, который определяет структуры данных и функции, работающие с этими структурами данных, является реализацией ООП.
Следовательно, нет никакой разницы в возможности повторного использования кода, это просто представление на двух разных уровнях. ООП — это парадигма, заголовки C — реализация в контексте C.