Заблокирован
|
|
1 | |
Развейте мои сомнения: упростится ли программирование при переходе от C к C++?16.07.2016, 02:45. Показов 8790. Ответов 219
Метки нет (Все метки)
Когда-то я уже начинал изучать C++, даже писал не большие программки на C++. Потом забросил и не кодил на C++ лет 8. Почти все забыл. Но тут возникла одна идея, которую нужно реализовать в виде программы и я решил тут «вспомнить молодость» и начать, что называется, «с нуля». Взял в руки книжку В.В. Подбельского «язык C++» 2005 года выпуска (знаю, что есть Страуструп, Липман и др. книжки посвежее и по «забористей» - но говорю же: «с самого нуля» решил начать, а в предисловии к книжке как раз написано было, что она для тех, кто изучает C++ “с нуля”) и стал читать. Попутно заглядывая в гугл.
И начитался про иерархии классов и наследование (в т.ч. перекрестное), про спецификаторы доступа (private, protected и public), про конструкторы (по умолчанию, копирования, преобразования), про перегрузку (как обычных функций, так и операторов и конструкторов), про дружественные функции и классы, про шаблоны функций и классов, про виртуальные функции и чисто абстрактные классы, про механизм «продвижения типов». И ошалел. А ведь есть ещё конструкции с ключевыми словами explicit,try catch,typeid, typename, reinterpret_cast, const_cast, static_cast, dynamic_cast, virtual, mutable, с которыми я пока не разбирался. Учитывая все сказанное я хочу спросить: 1) Если вам нужно разобраться в логике работы чужой, незнакомой вам, программы достаточно большого объема и выловить баги в ней, а в программе используются достаточно сложные иерархии классов (вплоть до 4-го левела и больше) с перекрестным наследованием, и в классах иерархии используются многократные перегрузки (причем как просто функций, так и функций операторов и конструкторов всех видов), дружественные функции, виртуальные функции, шаблоны, то ведь, пожалуй запутаться можно (« что и когда вызывается») и голову можно сломать пока разберешься? В чужой программе на чистом СИ разбираться и искать багги легче? У меня, например, даже простейшие программки, приведенные в книге, вызывали головную боль, пока разберешься «что это такое, куда и зачем». Получалось понять работу программ только раза с 10-го. С пониманием же программ на СИ такого не было. СИ я освоил буквально за 1 день. Вот я и подумал: а все эти навароты в С++ и что программа так трудно понимается, чем оправданы? 2) А если сам пишешь программу, то поставленную задачу можно решить на C++ реально проще и быстрей, чем на СИ? Если да, то в каких задачах проявляется преимущество C++? И за счет чего облегчается и ускоряется написание программы? 3) В каких-нибудь задачах (и в каких конкретно) вам приходилось в классе использовать сразу почти все ОО-средства С++ «по полной программе»? Т.е. перекрестное многоуровневое наследование с многократными перегрузками всего и вся с виртуальными функциями и абстрактными классами, с дружественными функциями и классами,с шаблонами, исключения, RTTI и т.п.. Или у вас такой необходимости никогда не возникало? Или вы не использовали «сразу все» просто, чтобы самому же не запутаться в своем коде?
0
|
16.07.2016, 02:45 | |
Ответы с готовыми решениями:
219
Развейте сомнения Вылетает примерно через 30 минут (при переходе в нет, в стим, или вообще простотак но при переходе) Загрузка ЦП под 100% при запуске винды, при открытии браузера, при переходе между вкладками Загрузка ЦП под 100% при запуске винды, при открытии браузера, при переходе между вкладками Windows7 |
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
22.07.2016, 21:32 | 203 |
не нужно пытаться решать проблемы будущего,
которое может и не наступить. и не нужно плодить сущности без необходимости. это только усложняет архитектуру. каноничность ради каноничности не нужна.
0
|
Заблокирован
|
|
22.07.2016, 21:32 [ТС] | 204 |
ОО парадигме уже почти 70(!!!) лет.
Да да. Первые упоминания о ней датируются 1949-м годом. Не пора бы уже чего-нибудь поновей использовать?
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
22.07.2016, 21:33 | 205 |
0
|
Заблокирован
|
|
22.07.2016, 21:44 [ТС] | 206 |
Не помню у кого это прочитал. ЕМНИП у Макконэла.
"Не решайте задач, которых нет"©
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
22.07.2016, 21:46 | 207 |
Макконелл вроде бы действительно,
что то подобное писал) Не по теме: человек, который читал Макконелла, а потом создал подобную тему
1
|
22.07.2016, 23:30 | 208 |
Добавлено через 2 минуты Как быть все же наступит? Никто не говорит о воображаемых задачах. Cуть в том что бы решать задачу чуть-чуть шире чем это требует ситуация сейчас, на то она и перспектива. Я про каноничность за ради ясности.
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
22.07.2016, 23:42 | 209 |
когда наступит, тогда и будем думать.
это - зряшная трата времени(денег) компании. нужно решать конкретные поставленные задачи, и ничем более. ясность наступает, когда кода мало, он лаконичен, и выполняет реальную полезную работу. ооп ради ооп - не нужен. а 100500 классов, которые которые не делают никакой полезной работы, никакой ясности не добавляют. у меня был случай: для решения одной задачки я организовал 3 класса. причем про один из них пользователи ничего не знают. то есть для работы нужно знать только про паблик двух маленьких классов. мой коллега глянул и сказал: - код простой, и его мало. однако решение не вполне канонично. - покажи каноничный вариант и вот он мне нарисовал uml-архитектурку. где образовалось больше двух десятков разных классов. большая часть которых нафиг не нужна для работы. и я спросил его: - вот что проще: два маленьких классах, или два десятка? - зато тут все по канонам ооп - задача ооп - упращать жизнь, а не усложнять. "ясность" - это миф. человеку со стороны все равно придется вникать в чужую кодовую базу. и вот здесь, чем меньше кода - тем проще, и быстрее будет протекать этот процесс. фундаментальное для ооп правило: "не плодить сущности без необходимости"
2
|
22.07.2016, 23:58 | 210 |
Думать с перспективой развития, это скорее экономия.
Ну с таким же успехом можно было упаковать все в один монолит. Ну дело ведь не в количестве строк. Но и так понятно Вопрос только в том что он понимал под "канонами ооп". Кроме того человек не должен быть "со стороны".
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
23.07.2016, 00:12 | 211 |
нет, это - убытки.
вы не должны думать ни о чем, кроме решения самой задачи в поставленных рамках. попытка учесть будущие (но ещё не существующие) требования - напрасная трата времени, и усложнение проекта без оснований. нельзя. проблема монолита: что бы понять целое, нужно понять частное. но что бы понять частное, нужно уже понимать целое. что бы этого не происходило, код дробят на отдельные независимые фрагменты, каждый из которых решает свою маленькую задачу. дело в количестве информации, которое нужно держать в голове, что бы работать с проектом. "в лучших традициях банды четырёх"
0
|
Заблокирован
|
|
23.07.2016, 10:12 [ТС] | 212 |
Давайте без хамства и "переходов на личности"
"Одинаково трудно разбираться в одной большой функции как в нескольких десятках маленьких" Добавлено через 9 минут Все эти каноны, изобретаемые бездельниками-теоретиками, "от лукавого". Это все равно что как если бы человек, никогда не державший в руке лопаты, взялся бы писать книгу "шаблоны копания траншей лопатой" Добавлено через 2 минуты В программировании как в инженерии: самые лучшие инженеры книжки не пишут, ибо им некогда. А пишут те, у кого куча свободного времени, потому что инженерной работой они не загружены (или вообще ей не занимаются) и посему слабо представляют себе её специфику и занимаются ТЕОРЕТИЗИРОВАНИЕМ
0
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|
23.07.2016, 10:25 | 213 |
А как назвать того, кто на форуме уже на протяжении недели пишет кучу бесполезных вопросов и даже не может скомпилировать пример из-за отстутсвия хидера?
3
|
Заблокирован
|
|
23.07.2016, 11:07 [ТС] | 214 |
Voivoid
Давайте не будем сводить эту тему к киданию какашками? ОК? Мы же с Вами взрослые люди. И никому читать взаимные оскорбления будет не интересно. Иначе я буду вынужден обратиться к модераторам. Поэтому давайте все же про "науку". То бишь про недостатки С++ и ООП подхода. Добавлено через 1 минуту А Вы можете скомпилировать код без хидеров? Научите как Добавлено через 18 минут "На вкус и цвет товарищей нет"© Для Вас они, может, и бесполезные, а для меня- самые важные и животрепещущие
0
|
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
|
|
23.07.2016, 11:17 | 215 |
ООП эффективна, полезна и удобна! Именно по этому она была создана, что произвело большой прорыв в программировании. Или вы думаете, что все бестолковые и просто не видят очевидных недочетов в ООП, и только вы понимаете, что ООП - бред? Вынужден вас разочаровать... пройдитесь по вакансиям на должность программиста практически везде требуют знание ООП, и что-то я как-то не наблюдаю требования: процедурное программирование.
Добавлено через 2 минуты ИсмаилПркопенко, у вас в теме написано: "Развейте мои сомнения".. Какие могут быть сомнения??? Откройте глаза, оглянитесь вокруг! 2016 на дворе!
0
|
Заблокирован
|
|
23.07.2016, 11:52 [ТС] | 216 |
Вот вот. А мы до сих пор юзаем ООП, первые упоминания о котором относятся к 1949-му году.
Т.е. уже почти 70 лет "дедушке" Как думаете: не пора ли использовать парадигму посвежей? Добавлено через 1 минуту Пройдитесь по магазинам - больше всего народ покупает самые дешевые продукты. Но это не значит что они самые полезные и качественные Добавлено через 1 минуту И кстати, кто не в курсе, ООП парадигма появилась РАНЬШЕ процедурной. Но гуглить сейчас это не буду - кому интересно сами нагуглите
0
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|
23.07.2016, 11:53 | 217 |
Не пора ли закончить с ТЕОРЕТИЗИРОВАНИЕМ и начать уже писать код ( ну или еще чем полезным заняться ) ?
Очевидно, что убрать ненужные зависимости
1
|
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
|
|
23.07.2016, 12:09 | 218 |
ага, процедурное программирование оплачивается выше, чем ООП... оно ведь качественное и полезное...
ваши предложения? + обоснуйте преимущества вашего подхода а вообще если вы так уверены что вам не нужно С++ и ООП, не учите... от темы попахивает холиваром / троллингом, 11 страниц не о чем.
1
|
Заблокирован
|
|
23.07.2016, 12:43 [ТС] | 219 |
Звучит глупо.
Это все равно что сказать: "просто взять и переписать все несколько миллионов строчек кода с нуля, так, чтобы стандартная библиотека вообще не использовалась" Добавлено через 2 минуты Господа! Если Вы считаете что у ООП и его С++-й реализации нет недостатков и что тут даже обсуждать нечего - то не надо хамить. Просто покиньте эту тему раз она Вам не интересна. А хамскими топиками засорять тему я не позволю Добавлено через 3 минуты То как ООП бывает красиво выглядет на искусственных, надуманных задачах я и без вас по книжкам знаю. А меня интересует то, что в ++-й реализации ООП просто омерзительно и безобразно сделано, что Вас выбешивает и каждый раз раздражает в С++. Вот что меня в ПЕРВУЮ очередь интересует. Т.е. ограничения и недостатки С++
0
|
Модератор
13727 / 10923 / 6479
Регистрация: 18.12.2011
Сообщений: 29,155
|
|
23.07.2016, 13:53 | 220 |
Закрываю тему.
Похоже, все, кто хотел, высказались!
2
|
23.07.2016, 13:53 | |
23.07.2016, 13:53 | |
Помогаю со студенческими работами здесь
220
Изменение цвета кнопки при получении фокуса при переходе по TAB POST переменные при нажатии на ссылку и при переходе на другую страницу При переходе на новую страницу при нажатии на F5 требует повторной отправки данных Клавиатура не срабатывает при начальной загрузке при переходе компьютера в выбор режимов Ошибка при переходе на следующую строку при переносе значений из excel в word При обновлении или при переходе по ссылкам у сайта слетает его структура? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Как написать микросервис на Go/Golang с Kafka и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang
Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
|
Как написать микросервис с нуля на C# с RabbitMQ, CQRS и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
|
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
|
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
|
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
|
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента!
4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве).
Первое вводное занятие. . .
|
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
|
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений
Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
|
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
|
UserScript для подсветки кнопок языков программирования в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения:
/ / ==UserScript==
/ / @name CF_DefaultLangSelect
/ / . . .
|
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
|
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
|