Странно, что еще не все в курсе провала ООП парадигмы.
Сейчас использовать ООП, это тоже самое, что писать на Delphi. Зачем мучить труп?
Что хорошего принесло ООП? Увеличение сложности, грузовик костылей, грузовик книг по обходу этих костылей и конечно тотальную несовместимость.
Начнем с конца. Было время, когда ООП еще не существовало, трава была зеленая и одуванчики в Москве цвели. Тогда бородатые программисты писали на Си, фортране и паскале. Возможно для вас это будет шоком, но программа могла быть написана на всех трех языках сразу. А если все это сверху посыпать ассемблером то получится замечательная программа.
Теперь посмотрим на ООП языки. Ни один из них не совместим с другим. Нельзя написать программу на Java C# и C++. Разумеется грузовик костылей подвезли незамедлительно.
Проблема эффективности. ООП языки игнорируют ее. Ну и что? Ведь производительность компьютеров стремительно растет.
Тем не менее эффективность — центральная проблема программирования.
Ее нельзя просто так игнорировать. Нужно использовать возможности оборудования, а не абстрагироваться от него.
ООП не выдерживает проверку временем.
Сколько живет АПИ написанное в процедурном стиле? Да сколько угодно. Примеры повсюду. Возрасты многих Си АПИ измеряются десятками лет. И они все так-же хороши.
А что у нас с ООП АПИ? Посмотрите на Java. Совсем молодой язык. Но какой бардак в его стандартной библиотеке! Сотни классов для одной простейшей задачи. Один повторяет функционал другого.
Куча устаревших классов. Чтобы прочесть файл нужно еще 10 раз подумать как это сделать.
В сравнении с библитекой Си (пяток функций, написанных 40 лет назад.) это просто ад и позор.
И так с любым ООП АПИ. Устаревают, приходят в негодность, обрастают не пойми чем и очень слабо поддерживаются.
Современные языки уже не поддерживают эту парадигму.
Например язык Go. Нет ООП, нет мерзкого наследования.
Зато есть возможность использования оборудования(многопоточность). Нет страшного оверхеда, присущего ООП парадигме. За такими языками будущее.
В последнее время стало модно ругать копирастов.
Воровство стало нормой.
Это ужасно. Так быть не должно.
Японцы сделали первый шаг к решению этой проблемы. И какая реакция?
Воровство интеллектуальной собственности несомненно должно быть уголовным преступлением.
Потому что в ее создание вложено не меньше труда, чем в создание объекта реального мира.
Надеюсь на скорую деанонимизацию интернета. Что решит все проблемы распространения контента.
На самом деле это обман покупателей.
Приходит человек в магазин. Покупать компьютер.
Спрашивает консультанта что ему взять, чтобы читать интернеты, играть в казуалки и просто чтобы был компьютер если что.
А ему рекомендуют вот этот с Убунтой. Говорят что убунта это хорошо, и что убунта это свободное ПО.
Человек покупает компьютер, приходит домой и плачет крокодиловыми слезами.
Потому что любимые казуалки не запускаются, диска C: нет, а чтобы выключить компьютер нужно пол часа искать эту кнопку.
Linux всегда была системой для так называемых «красноглазых» людей.
Таким людям не нужны компьютеры с предустановленной ОС.
А обычным людям не нужны компьютеры с предустановленным Linux
В итоге Dell зарабатывает обманом покупателей, продавая им компьютеры, которые не способны решать их задачи. И я уверен, что цена на них будет не меньше, чем цена на компьютеры с Windows(а то и больше).
// упаковка дерева _tree в буффер _buf
// _pos нужен для рекурсии
int ZipTree(Element *_buf, Element *_tree, int _pos)
{
Element *c;
_buf[_pos] = *_tree; // кладем листик в массив
c = &_buf[_pos]; // запоминаем место, куда положили
_pos++; // едем дальше
if(_tree->left)
{
c->left = (Element *)_pos; // меняем адрес на локальный
_pos = ZipTree(_buf, _tree->left, _pos); // кладем оставшуюся левую сторону дерева
}
if(_tree->right)
{
c->right = (Element *)_pos;
_pos = ZipTree(_buf, _tree->right, _pos);
}
return _pos;
}
Смысл в том, что нужно все указатели на листья перевести в относительную форму(относительно начала массива или файла.
Распаковка так-же просто. Заменяем локальные адреса на реальные адреса в памяти.
Недавно реализовывал этот алгоритм. Интереса ради.
То-же думал над упаковкой дерева. Но все оказалось слишком просто :-(
Алгоритм так себе.
Для сжатия изображений подходит слабо.
Те, где цветов мало сжимает достойно. Но никак не лучше LZW.
Фотографии сжимает всего на 10-20%. Что недостаточно.
Серые буквы на сером фоне. Даже не стал читать их.
Перешел к абзацу что же такое заземление.
Прочел.
За такое определение нужно заземлить вашу карму. Эх. Если бы я мог.
Ну ничего непонятно.
Когда увидел статью, то подумал что я тут смогу найти ответы на свои вопросы:
Можно ли использовать батарею для заземления?
Можно ли заземлиться в цветочном горшке?
Если нет, то может взять горшок побольше?
Чем заземление отличается от земли?
Корпус моего ПК бьется током. Бабки у подъезда сказали, что это из-за отсутствия заземления. Что мне делать?
Тут названа лишь одна годная книга для начинающих.
«Язык программирования Си».
Прочитав ее можно сразу писать программы.
Некоторые комментаторы тут советуют начинать с более высокоуровневых языков вроде питона или C#.
Но это ошибка.
Чтобы писать на этих языках — нужно обладать большим объемом знаний.
Откуда новичку знать какой паттерн в какой ситуации применить? (наверное он вообще о них знать не будет).
В Си же можно брать пример со стандартной библиотеки. И уже будет выходить неплохой код.
А как записать бинарное дерево в файл на С#?
Наверное нужно изучить что такое сериализация.
В Си же все очевидно.
Куда в С# девается память, после того, как она становится ненужна?
А почему так странно работают переменные в C#?
А зачем каждый раз создавать новый класс?
Для ответов на эти вопросы нужно прочитать много умных книжек.
Для Си же достаточно одной книги в 200 страниц.
Есть любые API и библиотеки.
А еще писать можно как хочешь, а не как правильно.
Например в C# нельзя написать if(a1 = a2)
Это может привести к психотравме...
Очень и очень непродуманный закон.
Например сейчас Google использует данные о моих интересах для более точного поиска и показа правильной и полезной рекламы.
Я не хочу терять поиск по тем областям, которые меня интересуют.
Я хочу, чтобы обо мне и моих интересах знали все заинтересованные стороны. Это помогает искать и предлагать правильный контент правильным людям.
В общем ерундой занимаются.
Лучше бы боролись с теми, кто звонит на домашний телефон и предлагает подключить интернет.
Откуда они мой телефон знают? Вот это проблема!
Мне кажется варианты переворота строки приведенные здесь весьма дурны.
По этой причине я решил показать вам свой.
Он красив, изящен и лишен недостатков.
Мне на городской телефон каждую неделю звонит девушка из МТС.
Уже раз 100 ей сказал, что имею контракт с местным небольшим провайдером и не желаю ничего менять.
Все-равно звонят :-(
Да, прошло 20 лет.
Но Linux остается все таким же хобби для некоторого числа людей.
Людям с непонятной мотивацией и «необычными» взглядами на вопросы свободы ПО, никогда не написать хоть сколь-нибудь серьезную ОС.
Код в первом посте изначально не верен.
Любой настоящий программист знает Си, знает как работает компьютер, знает как работает процессор и представляет себе что в данный момент находится в регистре.
Переменная а находится в стеке. И по выходе из функции она перестанет существовать. Этот кусочек памяти в будущем займет другая переменная с другим значением.
Поэтому нужно быть очень осторожным с этим кодом.
Да он работает, и будет работать при определенных, абсолютно понятных условиях(пока не поместишь в стек еще что-то).
Объяснение в первом посте абсолютно не профессионально.
Не знаю как у вас, а у меня от прописи всегда болела рука. Не важно сколько я писал и тренировал ее.
По моему заставлять детей на каждом уроке писать несколько страниц это издевательство. Давно нужно это запретить.
А писать печатными буквами это каменный век.
Современный браузер — средство для работы в интернете, а не просто отображатель страниц.
ИЕ9 не знает что такое почта, IRC, torrent, скины и современный интернет.
Но самое главное это скорость открытия страниц.
Мне не важны ваши тесты. У меня есть свои глаза.
Ясно видно, что этот браузер не способен работать на равных с той-же Оперой.
>>1. УПРОЩЕНИЕ ПОНИМАНИЯ ЧЕЛОВЕКОМ
Человек понимает простые вещи. ООП же делает из мухи слона.
За примером далеко ходить не надо.
Функторы. И ваш пример с уткой тут не подходит.
Вот указатель на функцию другое дело. Что такое «указатель на функцию»? «Это указатель на код, который в памяти лежит. Ему можно передать управление»
Что такое «функтор» и почему там 9 этажей шаблонов?
>>2. ЛОКАЛИЗАЦИЯ ВЛИЯНИЯ КОДА
Модульность? А как-же модульность?
Я тут еще бы много чего написал, но ваш пост уж очень сильно запутан.
>>Назовем сущности объектами (в смысле экземпляры классов), а поведение — классом.
Программа — это данные и код, который этими данными управляет.
Код пишет программист итлько он определяет то, как этот код будет управлять данными.
Программы пишут для компьютеров, а не для человека. Поэтому не стоит приводить столько сравнений с реальной жизнью. Они тут не уместны.
ООП изначально ошибочная парадигма. Она никогда не сможет претендовать на звание единственноверной парадигмы программирования.
А вообще это проблема Intel.
Они специально меняют сокеты пачками, чтобы выкачать из нас деньги.
Поэтому я предпочитаю продукцию AMD.
Какая невероятная статья! Какой полезный пост!
Сейчас использовать ООП, это тоже самое, что писать на Delphi. Зачем мучить труп?
Что хорошего принесло ООП? Увеличение сложности, грузовик костылей, грузовик книг по обходу этих костылей и конечно тотальную несовместимость.
Начнем с конца. Было время, когда ООП еще не существовало, трава была зеленая и одуванчики в Москве цвели. Тогда бородатые программисты писали на Си, фортране и паскале. Возможно для вас это будет шоком, но программа могла быть написана на всех трех языках сразу. А если все это сверху посыпать ассемблером то получится замечательная программа.
Теперь посмотрим на ООП языки. Ни один из них не совместим с другим. Нельзя написать программу на Java C# и C++. Разумеется грузовик костылей подвезли незамедлительно.
Проблема эффективности. ООП языки игнорируют ее. Ну и что? Ведь производительность компьютеров стремительно растет.
Тем не менее эффективность — центральная проблема программирования.
Ее нельзя просто так игнорировать. Нужно использовать возможности оборудования, а не абстрагироваться от него.
ООП не выдерживает проверку временем.
Сколько живет АПИ написанное в процедурном стиле? Да сколько угодно. Примеры повсюду. Возрасты многих Си АПИ измеряются десятками лет. И они все так-же хороши.
А что у нас с ООП АПИ? Посмотрите на Java. Совсем молодой язык. Но какой бардак в его стандартной библиотеке! Сотни классов для одной простейшей задачи. Один повторяет функционал другого.
Куча устаревших классов. Чтобы прочесть файл нужно еще 10 раз подумать как это сделать.
В сравнении с библитекой Си (пяток функций, написанных 40 лет назад.) это просто ад и позор.
И так с любым ООП АПИ. Устаревают, приходят в негодность, обрастают не пойми чем и очень слабо поддерживаются.
Современные языки уже не поддерживают эту парадигму.
Например язык Go. Нет ООП, нет мерзкого наследования.
Зато есть возможность использования оборудования(многопоточность). Нет страшного оверхеда, присущего ООП парадигме. За такими языками будущее.
Воровство стало нормой.
Это ужасно. Так быть не должно.
Японцы сделали первый шаг к решению этой проблемы. И какая реакция?
Воровство интеллектуальной собственности несомненно должно быть уголовным преступлением.
Потому что в ее создание вложено не меньше труда, чем в создание объекта реального мира.
Надеюсь на скорую деанонимизацию интернета. Что решит все проблемы распространения контента.
Приходит человек в магазин. Покупать компьютер.
Спрашивает консультанта что ему взять, чтобы читать интернеты, играть в казуалки и просто чтобы был компьютер если что.
А ему рекомендуют вот этот с Убунтой. Говорят что убунта это хорошо, и что убунта это свободное ПО.
Человек покупает компьютер, приходит домой и плачет крокодиловыми слезами.
Потому что любимые казуалки не запускаются, диска C: нет, а чтобы выключить компьютер нужно пол часа искать эту кнопку.
Linux всегда была системой для так называемых «красноглазых» людей.
Таким людям не нужны компьютеры с предустановленной ОС.
А обычным людям не нужны компьютеры с предустановленным Linux
В итоге Dell зарабатывает обманом покупателей, продавая им компьютеры, которые не способны решать их задачи. И я уверен, что цена на них будет не меньше, чем цена на компьютеры с Windows(а то и больше).
// _pos нужен для рекурсии
int ZipTree(Element *_buf, Element *_tree, int _pos)
{
Element *c;
_buf[_pos] = *_tree; // кладем листик в массив
c = &_buf[_pos]; // запоминаем место, куда положили
_pos++; // едем дальше
if(_tree->left)
{
c->left = (Element *)_pos; // меняем адрес на локальный
_pos = ZipTree(_buf, _tree->left, _pos); // кладем оставшуюся левую сторону дерева
}
if(_tree->right)
{
c->right = (Element *)_pos;
_pos = ZipTree(_buf, _tree->right, _pos);
}
return _pos;
}
Смысл в том, что нужно все указатели на листья перевести в относительную форму(относительно начала массива или файла.
Распаковка так-же просто. Заменяем локальные адреса на реальные адреса в памяти.
Недавно реализовывал этот алгоритм. Интереса ради.
То-же думал над упаковкой дерева. Но все оказалось слишком просто :-(
Алгоритм так себе.
Для сжатия изображений подходит слабо.
Те, где цветов мало сжимает достойно. Но никак не лучше LZW.
Фотографии сжимает всего на 10-20%. Что недостаточно.
Зато прост в реализации.
Серые буквы на сером фоне. Даже не стал читать их.
Перешел к абзацу что же такое заземление.
Прочел.
За такое определение нужно заземлить вашу карму. Эх. Если бы я мог.
Ну ничего непонятно.
Когда увидел статью, то подумал что я тут смогу найти ответы на свои вопросы:
Можно ли использовать батарею для заземления?
Можно ли заземлиться в цветочном горшке?
Если нет, то может взять горшок побольше?
Чем заземление отличается от земли?
Корпус моего ПК бьется током. Бабки у подъезда сказали, что это из-за отсутствия заземления. Что мне делать?
В общем статья ужасна и неинтересна.
Это вызывает сильный шок. И может стать причиной лютой ненависти к этому браузеру.
Впрочем люди разумные уж сделали свой выбор.
Opera — бесспорно лучший браузер.
«Язык программирования Си».
Прочитав ее можно сразу писать программы.
Некоторые комментаторы тут советуют начинать с более высокоуровневых языков вроде питона или C#.
Но это ошибка.
Чтобы писать на этих языках — нужно обладать большим объемом знаний.
Откуда новичку знать какой паттерн в какой ситуации применить? (наверное он вообще о них знать не будет).
В Си же можно брать пример со стандартной библиотеки. И уже будет выходить неплохой код.
А как записать бинарное дерево в файл на С#?
Наверное нужно изучить что такое сериализация.
В Си же все очевидно.
Куда в С# девается память, после того, как она становится ненужна?
А почему так странно работают переменные в C#?
А зачем каждый раз создавать новый класс?
Для ответов на эти вопросы нужно прочитать много умных книжек.
Для Си же достаточно одной книги в 200 страниц.
Есть любые API и библиотеки.
А еще писать можно как хочешь, а не как правильно.
Например в C# нельзя написать if(a1 = a2)
Это может привести к психотравме...
Например сейчас Google использует данные о моих интересах для более точного поиска и показа правильной и полезной рекламы.
Я не хочу терять поиск по тем областям, которые меня интересуют.
Я хочу, чтобы обо мне и моих интересах знали все заинтересованные стороны. Это помогает искать и предлагать правильный контент правильным людям.
В общем ерундой занимаются.
Лучше бы боролись с теми, кто звонит на домашний телефон и предлагает подключить интернет.
Откуда они мой телефон знают? Вот это проблема!
По этой причине я решил показать вам свой.
Он красив, изящен и лишен недостатков.
void reverse(char *_str, int _len)
{
(_len < 2)? 0: reverse((*_str ^= _str[--_len] ^= *_str ^= _str[_len], ++_str), --_len);
}
_len это просто strlen(_str);
По посту. Если бы я отвечал за набор персонала, то никогда бы не взял на работу человека, пишущего на Си как автор.
Сегодняшняя ситуация с воровством информационных продуктов просто ужасна.
Нужно ее исправлять. Быстро и жестко.
Уже раз 100 ей сказал, что имею контракт с местным небольшим провайдером и не желаю ничего менять.
Все-равно звонят :-(
Я разочарован в этой стране :-(
Но Linux остается все таким же хобби для некоторого числа людей.
Людям с непонятной мотивацией и «необычными» взглядами на вопросы свободы ПО, никогда не написать хоть сколь-нибудь серьезную ОС.
Любой настоящий программист знает Си, знает как работает компьютер, знает как работает процессор и представляет себе что в данный момент находится в регистре.
Переменная а находится в стеке. И по выходе из функции она перестанет существовать. Этот кусочек памяти в будущем займет другая переменная с другим значением.
Поэтому нужно быть очень осторожным с этим кодом.
Да он работает, и будет работать при определенных, абсолютно понятных условиях(пока не поместишь в стек еще что-то).
Объяснение в первом посте абсолютно не профессионально.
По моему заставлять детей на каждом уроке писать несколько страниц это издевательство. Давно нужно это запретить.
А писать печатными буквами это каменный век.
Современный браузер — средство для работы в интернете, а не просто отображатель страниц.
ИЕ9 не знает что такое почта, IRC, torrent, скины и современный интернет.
Но самое главное это скорость открытия страниц.
Мне не важны ваши тесты. У меня есть свои глаза.
Ясно видно, что этот браузер не способен работать на равных с той-же Оперой.
Человек понимает простые вещи. ООП же делает из мухи слона.
За примером далеко ходить не надо.
Функторы. И ваш пример с уткой тут не подходит.
Вот указатель на функцию другое дело. Что такое «указатель на функцию»? «Это указатель на код, который в памяти лежит. Ему можно передать управление»
Что такое «функтор» и почему там 9 этажей шаблонов?
>>2. ЛОКАЛИЗАЦИЯ ВЛИЯНИЯ КОДА
Модульность? А как-же модульность?
Я тут еще бы много чего написал, но ваш пост уж очень сильно запутан.
>>Назовем сущности объектами (в смысле экземпляры классов), а поведение — классом.
Программа — это данные и код, который этими данными управляет.
Код пишет программист итлько он определяет то, как этот код будет управлять данными.
Программы пишут для компьютеров, а не для человека. Поэтому не стоит приводить столько сравнений с реальной жизнью. Они тут не уместны.
ООП изначально ошибочная парадигма. Она никогда не сможет претендовать на звание единственноверной парадигмы программирования.