LINUX.ORG.RU

Системный софт и ООП


0

3

Всем привет!

Задался я тут таким вопросом, почему системный софт (ядра ОС, драйверы, биосы) не пишут на С++ с использованием ООП? Казалось бы, преимущества налицо. C++ близок к Си, поэтому потери производительности должны быть незначительны. Расход памяти тоже не должен заметно возрасти. Зато ООП позволяет программам быть безопасными, программер лучше концентрируется на предметной области, а компилятор это преобразует в код. С++ ничего не добавляет непредсказуемого в рантайме.

Можно писать весь каркас объектно ориентированным, а в точках где требуется скорость писать на С, можно использовать любые возможности С и ООП и безопасность С++ (например операторы static_cast, auto, namespace и многое другое). Обернутые в классы, можно использовать шаблоны, которые на этапе выполнения ничего не добавляют, но помогают настраивать объекты.

Например объект таймера, у него статический метод который обрабатывает прерывание, никто к нему не имеет доступа, он приватный и оповещает все подсоединенные таймеры.

Или может я ошибаюсь и системный софт сейчас пишут на С++? А на С программируют под микроконтроллерами скорее от бедности? Есть ли примеры такого софта?

Ответ на: комментарий от unsigned

Не плохо) Остаётся только подождать ещё лет десять пока введут возможность считать дочернюю структуру «примерно таким же типом, что и родительская», чтобы типы не приводить.

KivApple ★★★★★
()
Ответ на: комментарий от son_of_a_gun

Особенно смешно читать вернувшись с работы. Неосилятор с манией величия - мне не о чём с тобой разговаривать.

Неужели, тебе на работе не рассказывали чем отличаются полностью абстрактные классы в С++ от интерфейсов в Java?

Зафрендил.

Очень смешно :)

mono ★★★★★
()
Ответ на: комментарий от mono

Неужели, тебе на работе не рассказывали чем отличаются полностью абстрактные классы в С++ от интерфейсов в Java?

Удиви меня.

Очень смешно :)

Печально же.

son_of_a_gun
()
Ответ на: комментарий от mono

Выше по треду все неплохо расписали.

требует виртуального наследования в случае сложной иерархии

а) не требует, если писать код не левой ногой
б) в Java «в случае сложной иерархии» вылазят более другие проблемы, которые ты наверняка знаешь

не гарантирует отсутствия реализации

откровенная придирка

не обрабатывается компилятором как контракт

как и в Java

vaino
()
Ответ на: комментарий от mono

О мудрейший - здесь же только ты знаешь что такое интерфейсы и «чисто» абстрактные классы, другие и представления не имеют:
Отсутствие реализации гарантирует документация - а возможность писать базовую реализацию по мне так преимущество. Разрешение конфликтов имен никогда не было особенностью интерфейсов. Про виртуальное наследование - особенности плюсов, на суть абстрактных классов не влияющие. Что-то хотел сказать? В чем принципиальное отличие?

son_of_a_gun
()

На самом деле, с импользованием go tiny runtime, можно писать системный софт даже на go.

quantum-troll ★★★★★
()
Ответ на: комментарий от son_of_a_gun

В чем принципиальное отличие?

по факту интерфейсы в Java - тоже не интерфейсы, если строго следовать определению, но ты ему это не говори ;)

vaino
()
Ответ на: комментарий от son_of_a_gun

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

Что-то хотел сказать? В чем принципиальное отличие?

Это не средство языка. Интерфейс в С++ - это логическая сущность, которая создается программистом.

mono ★★★★★
()
Ответ на: комментарий от vaino

Почему в отрыве-то, задача вполне четкая: затроллить оппонента.

geekless ★★
()
Ответ на: комментарий от vaino

Хорошо, перефразирую.

Напомню, мы говорим про реализацию ООП в конкретных языках. Реализация ООП в Java более удобная и прозрачная, чем в С++.

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

mono ★★★★★
()
Ответ на: комментарий от mono

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

От того что верно второе утверждение, первое не становится верным. И уж тем более не к месту тут «так же».

Это не средство языка.

У тебя какие-то особые плюсы без абстрактных классов? Принципиальных отличий ты не назвал - одно пустословие в стиле «я ненавижу плюсы, и пытаюсь хоть как-то на них наехать». Как всё-таки жаль что модераторы не могут быть друзьями...

son_of_a_gun
()
Ответ на: комментарий от son_of_a_gun

От того что верно второе утверждение, первое не становится верным. И уж тем более не к месту тут «так же».

Если ты до сих пор не уловил мою мысль, то мне жаль. Я не то что бы ненавижу плюсы, язык не становится объектно-ориентированным от наличия там слова «class».

У тебя какие-то особые плюсы без абстрактных классов?

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

Как всё-таки жаль что модераторы не могут быть друзьями...

Чтобы больше не нервировать тебя, мы можем закончить разговор.

mono ★★★★★
()
Ответ на: комментарий от mono

Я не то что бы ненавижу плюсы

У меня для тебя плохие новости.

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

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

Чтобы больше не нервировать тебя, мы можем закончить разговор.

Да, пожалуйста. Я спать.

son_of_a_gun
()
Ответ на: комментарий от mono

Реализация ООП в Java более удобная и прозрачная, чем в С++.

было бы странно ожидать другого от ЯП, который полностью стоит на ООП :) странно, что при этом Java проигрывает в этом плане( ООП ) мультипарадигменным ЯП вроде C# или CL

vaino
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.