votod, сходить на sql-ex, например, и пройти хотя бы пару уроков. Вам здесь кто-то должен рассказывать, как в SQL пишутся запросы? Вот Rsa97 даже попробовал - не помогает.
NerfX, я докопался не к самому вопросу, а к пафосу его формулировки, основанному на ложной посылке о том, что развитие технологий всецело зависит от исполнителей.
ThunderCat, внезапно, его класс может как раз и быть тем единственно ответственным, которому скармливают данные и получают сформатированный отчет в HTML. Не вижу, что в тексте противоречит этой версии. Разве что желание унаследовать от него класс, делающий совсем другую работу ;)
ivandao, ну, вы действительно задали дурной вопрос. Технологии, на которые завязана такая доля рынка, развиваются отнюдь не по воле разработчиков и даже их работодателя. Вспомните хотя бы, как хозяин Джавы попытался диктовать тому же Гуглу условия насчет ее использования в Андроиде.
ivandao, ВНЕЗАПНО!
Наиболее распространенный язык, оказывается, развивается при активном участии тех, кто его так распространил. Это сенсация, я считаю. Даже интересно, какие выводы вы можете теперь сделать по его дальнейшей судьбе. Наверное, рискнете предположить, что его будут и дальше повсеместно использовать...
ivandao, вот только это ответ не на вопрос "как развивается язык, куда движется и чьи интересы обслуживает".
И ответ, несмотря на кажущуюся четкость и однозначность, может в одночасье стать неверным, как я уже указал выше.
ivandao, если завтра этот создатель возьмет и не договорится о дальнейших планах, например, с Гуглем - появится второй репозиторий с совсем другим человеком во главе. И разработка продолжится в том ключе, который больше устраивает тех, кто двигает рынок. Оставив того очень важного человека, которого вы увидели аж в Википедии, за бортом. Чтобы это понять, вам даже подрастать, думаю, не требуется.
На вики "этот человек" в двух соседних строчках написан по-разному.
Такой уж это источник ;)
В целом ваш вопрос здорово напоминает дотошный интерес к тому, на машине какой марки возят министра иностранных дел, чтобы достичь понимания внешней политики.
Вообще-то уже со времен "Собора и Базара" понятие "кто разрабатывает открытый код" не имеет четкого и однозначного ответа. Даже если кажется, что имеет.
Мне кажется, что это все-таки больше про O, чем про L.
Фактически, LSP здесь выворачивается наизнанку: чтобы обеспечить вариативность наследников, создается максимально абстрактный класс, описывающий все, что может понадобиться наследникам, в самой обобщенной форме.
Постоянно устонавливается программа calib battery, которая мне даром не нужна, на неё антивирусы не орут, но она мне просто не нужна!
А вы уверены, что она не нужна вашей батарейке для того, чтобы не взорваться в вашем кармане?
Этот ламерский вопль наводит на мысли, что вы вообще не очень понимаете, что сами же сделали со своим устройством. Ну, покажите его разбирающемуся человеку...
Роман, на самом деле, как минимум одна проблема требует как минимум одного яблочного устройства посвежее - недавно введенная двухфакторная авторизация разработчика, без которой не подпишешь приложение - и которая не работает в виртуалке.
vpman, нарушена инкапсуляция - внешний код слишком много знает о внутреннем.
Таким образом, в контракт базового класса неявно вписано требование возвращать этим методом именно HTML, причем с определенными тегами. Как следствие - переделка нарушает LSP.
А вот если вы часть теста завернете в сам класс, создав у него изменяемый метод проверки корректности отчета, то потроха родителя перестанут торчать наружу, ваши тесты будут только вызывать child->IsValidReport(child->MakeReport()), и вы не будете нарушать LSP никакими переделками форматов.
Элементарно: изменение методов в наследниках уточняет специализацию класса, а не противоречит контракту базового класса.
Если у вас наследники делают совершенно не то, на что подписан родитель - это у вас противоречие, а не у Лисков ;)
YzxI, так вы и используете шаблон. В дереве.
А подставляться в этот шаблон (и собираться в это дерево, и выводиться своей функцией) будут ваши классы, каждый из которых имеет метод show. Как раз наследование для шаблонов не требуется.
У вас в шаблоне не хватает описания структуры, в которой хранится дерево, и ее перебора для вывода каждого элемента. И то, и другое будет шаблонным.