Заголовочные файлы на языке C и возможность многократного использования объектно-ориентированного программирования? - PullRequest
2 голосов
/ 05 ноября 2011

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

Ответы [ 3 ]

2 голосов
/ 05 ноября 2011

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

Объектно-ориентированное программирование посредством использования наследования и полиморфизма в таких языках, как C ++ и Java, имеет аналогичный эффект ... вы определяете интерфейс и / или базовый класс один раз, а затем вы можете «включить» это код через наследование в другом классе. Кроме того, виртуальные методы наряду с полиморфизмом позволяют вам писать функции, которые принимают один тип базового класса в качестве аргумента, и в то же время вызывают код, который фактически определен в производном типе класса. По сути, это означает, что вы можете вызвать новый код (т. Е. Ваш производный класс), в старый код (т. Е. Функцию, которая приняла тип базового класса). Например, как разработчик библиотеки, вы можете определить набор типов / интерфейсов базового класса, и пользователь может получить эти базовые классы, но при этом эффективно использовать их в тех же функциях, которые были включены в библиотеку, которая принимает аргументы типа базового класса. Таким образом, вы не обязаны дублировать эти функции ... они все еще могут использоваться вашими "новыми" производными классами.

0 голосов
/ 05 ноября 2011

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

Таким образом, нет разницы в возможности повторного использования кода, это просто представление на двух разных уровнях. ООП - это парадигма, заголовки Си - о реализации в контексте Си.

0 голосов
/ 05 ноября 2011

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

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

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

...