Обоснование модификации программы кратко

Обновлено: 05.07.2024

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

  • манипуляции с исполняемым кодом программы после компиляции или во время загрузки кода;
  • изменение исходного кода перед компиляцией.

Зачем модифицировать?

Начнем с вопроса зачем программе модифицировать другую программу. Метапрограммирование помогает уменьшить объем boilerplate кода в проекте и концентрироваться на главном, улучшить читаемость кода и решить задачи которые сложно решить другим способом.

Простейший пример в java — JavaBeans и get/set методы для доступа к полям класса, также примером может служить создание билдеров для класса, автореализации equals/hash в IDE и т.п.

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

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

Модификация исполняемых инструкций программы

Можно модифицировать байт-код программы и это самый распространенный способ. Делать это можно как сразу после компиляции, но перед сборкой jar, так и при загрузке класса. В первом случае это будет плагин системы сборки проекта, во втором специальный загрузчик классов или java агент, либо механизм hotswap в jvm. Подход с агентами и загрузчиками классов очень похож на самомодифицирующиеся программы в машинном коде и полиморфные вирусы.

Байт-код файла, который загружает jvm имеет структуру, описанную в официальной документации о формате класса
Приложение javap позволяет просматривать байт-код скомпилированного класса

Исходный текст класса:

Вывод javap на консоль для байт-кода этого класса:

Но модифицировать байт-код вручную имеет смысл только в учебных целях или если вы ниндзя, который любит создавать и преодолевать сложности. The Java Virtual Machine Specification отвечает на большинство вопросов на этом этапе.

В промышленном программировании работу с байт-кодом упрощают библиотеки ASM, javassist, BCEL, CGLIB. После парсинга байт кода, тот же ASM позволяет программисту работать с байт кодом как через Tree API, так и в событийной модели, используя шаблон visitor. Кроме анализа, возможна и модификация, добавление новых инструкций, полей, методов и т.п. В природе существуют и другие библиотеки работы с байт кодом, но их используют реже.

Пример использования API ASM для

В AspectJ разработчик определяет действия в виде классов, аннотируя их как аспекты и указывая в каких точках программы(Pointcut) их следует вызывать. Синтаксис определения pointcut выражений также достаточно высокоуровневый. Такой подход к модификации байт-кода более прост в использовании для программиста.


Трансформация программы за счет модификации байт-кода имеет свои сильные и слабые стороны:
Плюсы Минусы
подход работает при отсутствии исходных текстов программы сложность анализа и модификации, при нетривиальных трансформациях
независимость от компилятора отсутствие информации, доступной только в исходном коде

Трансформация AST исходного кода, метапрограммирование

Теория и практика трансформации исходного кода давно применяется в метапрограммировании, Prolog, Lisp, макросах и препроцессорах языков программирования.

При данном подходе исходный текст программы трансформируется либо дополняется другой программой перед компиляцией, а затем компилируется. Работать удобнее не с самим текстом программы, а с абстрактным синтаксическим деревом построенным из него (abstract syntax tree, AST).

Опять же, удобство метапрограммирования зависит от поддержки его в самом языке программирования. Существует шутка

В Лиспе, если охота аспектно-ориентированного программирования, нужно лишь настругать немного макросов, и готово. В Java, нужен Грегор Кичалес, создающий новую фирму, и месяцы и годы попыток заставить всё работать.

Поэтому в jvm чуть сложнее, хоть механизм reflection и является частью языка и платформа может динамически загружать и исполнять байт-код. Сразу на ум приходят две технологии, которые используют кодогенерацию — JPA static metamodel generator и jaxb code generation. Другой пример — project Lombok, который позволяет автоматически реализовать, то что раньше генерировалось IDE или писалось вручную и поддерживалось разработчиками.

Реализовано в Lombok это с помощью модификации AST пользовательской программы и кодогенерации.

Схожая функциональность, со своими ограничениями, есть и в java для аннотаций с областью видимости compile time — Annotation Processing Tool.

В случае с парсингом java исходного кода, лучше чем javac и eclipse java compiller вряд ли кто справится. Есть альтернативы, такие как Spoon и JTransformer, но насколько полно они поддерживают спецификацию и сложные классы, даже нет желания проверять.

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

Итак, в модификации исходного кода программы есть слабые и сильные стороны:

Плюсы Минусы
большее количество информации, чем в байт-коде этап компиляции или интерпретации (память, время)
возможности, подобные рефакторингу в IDE требование к наличию исходных текстов, способа автоматически найти их для заданного класса/jar

Трансформация AST кода и рекомпиляция во время выполнения

Самая хардкорная часть этой заметки — мысли про перекомпиляцию в рантайм. Модификация и компиляция AST java кода в момент выполнения может быть нужна, если требуются костыли: проект либо полный капролит, либо делать и поддерживать десятки форков разных версий очень трудоемко, либо если его менеджмент и разработчики считают его идеальным и не позволяют никому его модификацию, но при этом исходный текст есть в enterprise maven репозитарии. И этот подход нужен только если задачу невозможно или неудобно решать двумя ранее описанными классами трансформации программы.

С компиляцией все относительно просто. JavaCompiler API позволяет скомпилировать программу из исходного кода в момент выполнения, предоставляя интерфейс независимый от реализации. При изучении манифеста и исходных текстов eclipse EJC компилятора, обнаружил что и он поддерживает JavaCompiler API.

Но при анализе текста программы все равно нет публичного и универсального API для работы с AST. Т.е. придется работать либо с com.sun.source.tree.* либо org.eclipse.jdt.core.dom.*

Задача с поиском исходного текста класса легко решается, если проект публиковался в maven репозитарий вместе с артефактом типа source и в jar с классами есть файлы pom.properties или pom.xml, либо есть некий словарь соответствия названия/хеша артефакта исходному коду соответствующего jar файла и способ получить эти исходники во время работы программы.

Плюсы — для трансформации доступно больше информации, чем есть в байт-коде, применение не требует пересборки проекта и почти так же удобно как и применение AspectJ агента, но при этом трансформацию невозможно было выполнить средствами преобразования байт-кода, либо очень трудоемко.

Минусы такие же, как и у прошлого подхода: память, время, требование к наличию исходного текста программы и способа его найти для данного класса.

Примеры вышесказанного в виде кода ejc+maven будут в ближайшие месяцы, да и задача выбрана вполне жизненная. Сталкивались ли вы с подобным? Какие задачи из вашей практики можно было бы элегантно решить только с помощью трансформации java кода и рекомпиляции во время выполнения?

Кстати, возможности компилятора TinyCC и его размер доказывают, что такой подход возможен и для C программ.


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

Рабочая программа по русскому языку составлена в соответствии сфедеральным компонентом государственного стандарта общего образования, одобренного совместным решением коллегии Минобразования России и Президиума РАО от 23.12.2003 г. № 21/12 и утвержденного приказом Минобрнауки РФ от 05.03.2004 г. № 1089 и приказом Министерства образования и науки Российской Федерации от 30 августа 2010 года № 889 «О внесении изменений в федеральный базисный учебный план и примерные учебные планы для образовательных учреждений Российской Федерации, реализующих программы общего образования, утвержденные приказом Министерства образования Российской Федерации от 9 марта 2004 года № 1312.

За основу рабочей программы взята авторская программа по русскому языку для 5 – 9 классов М.Т.Баранова, Т.А.Ладыженской, Н.М.Шанского, которая полностью соответствует новым образовательным стандартам по русскому языку и входит в состав УМК.

Изменения, внесённые в авторскую учебную программу и их обоснование

В авторской программе по русскому языку для 5 – 9 классов М.Т.Баранова, Т.А.Ладыженской, Н.М.Шанского на изучение русского языка в 8 классе отведено 102 часов, а в рабочей программе – 105 часов, так как в базисном учебном плане на изучение русского языка в 8 классе отводится 3 часов в неделю, а в учебном году 35 рабочих недель.

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

Содержание Часов в авторской программе Часов в рабочей программе
Введение
Повторение пройденного в 5-7 классах 6+2 5+2
Словосочетание
Простое предложение 3+1 1+1
Главные члены предложения 6+2
Второстепенные члены предложения 6+2 8+4
Простые односоставные предложения 9+2 8+3
Неполные предложения
Однородные члены предложения 12+2 8+3
Обращения, вводные слова и междометия 9+2
Обособленные члены предложения 18+2 13+6
Прямая и косвенная речь 6+1 5+4
Повторение и систематизация пройденного в 8 классе 5+1 16+2
Итого

Реализовать поставленные цели предполагается посредством использования учебно-методического комплекта:

Место предмета в учебном плане.

Федеральный базисный учебный план для образовательных учреждений Российской Федерации предусматривает обязательное изучение русского (родного) языка в VIII классе – 105 часов(3 часа в неделю).

Общая характеристика предмета

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

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

Языковая и лингвистическая (языковедческая) компетенции – освоение необходимых знаний о языке как знаковой системе и общественном явлении, его устройстве, развитии и функционировании; овладение основными нормами русского литературного языка; обогащение словарного запаса и грамматического строя речи учащихся; формирование способности к анализу и оценке языковых явлений и фактов, необходимых знаний о лингвистике как науке и ученых-русистах; умение пользоваться различными лингвистическими словарями.

Культуроведческая компетенция – осознание языка как формы выражения национальной культуры, взаимосвязи языка и истории народа, национально-культурной специфики русского языка, владение нормами русского речевого этикета, культурой межнационального общения.

Курс русского языка для VIII класса направлен на совершенствование речевой деятельности учащихся на основе овладения знаниями об устройстве русского языка и особенностях его употребления в разных условиях общения, на базе усвоения основных норм русского литературного языка, речевого этикета. Учитывая то, что сегодня обучение русскому языку происходит в сложных условиях, когда снижается общая культура населения, расшатываются нормы литературного языка, в программе усилен аспект культуры речи. Содержание обучения ориентировано на развитие личности ученика, воспитание культурного человека, владеющего нормами литературного языка, способного свободно выражать свои мысли и чувства в устной и письменной форме, соблюдать этические нормы общения. Рабочая программа предусматривает формирование таких жизненно важных умений, как различные виды чтения, информационная переработка текстов, поиск информации в различных источниках, а также способность передавать ее в соответствии с условиями общения.

Доминирующей идеей курса является интенсивное речевое и интеллектуальное развитие учащихся. Русский язык представлен в программе перечнем не только тех дидактических единиц, которые отражают устройство языка, но и тех, которые обеспечивают речевую деятельность. Каждый тематический блок программы включает перечень лингвистических понятий, обозначающих языковые и речевые явления, указывает на особенности функционирования этих явлений и называет основные виды учебной деятельности, которые отрабатываются в процессе изучения данных понятий. Таким образом, программа создает условия для реализации деятельностного подхода к изучению русского языка в школе.

Цели обучения

Курс русского языка направлен на достижение следующих целей, обеспечивающих реализацию личностно-ориентированного, когнитивно-коммуникативного, деятельностного подходов к обучению родному языку:

· воспитание гражданственности и патриотизма, сознательного отношения к языку как явлению культуры, основному средству общения и получения знаний в разных сферах человеческой деятельности; воспитание интереса и любви к русскому языку;

· совершенствование речемыслительной деятельности, коммуникативных умений и навыков, обеспечивающих свободное владение русским литературным языком в разных сферах и ситуациях его использования; обогащение словарного запаса и грамматического строя речи учащихся; развитие готовности и способности к речевому взаимодействию и взаимопониманию, потребности к речевому самосовершенствованию;

· освоение знаний о русском языке, его устройстве и функционировании в различных сферах и ситуациях общения; о стилистических ресурсах русского языка; об основных нормах русского литературного языка; о русском речевом этикете;

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

Одна из основных задач – организация работы по овладению учащимися прочными и осознанными знаниями.

Специальной задачей преподавания русского языка является формирование языковой, коммуникативной и лингвистической компетенции учащихся.

Программа предусматривает поурочное усвоение материала, для чего значительное место отводится повторению.

Одно из основных направлений – организация работы по овладению учащимися прочными и осознанными знаниями.

Усвоение теоретических сведений осуществляется в практической деятельности учащихся при анализе, сопоставлении и группировке фактов языка, при проведении различных видов разбора.

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

Языковая компетенция реализуется в процессе решения следующих познавательных задач: формирования у учащихся научно-лингвистического мировоззрения, вооружения их основами знаний о родном языке, развития языкового и эстетического идеала.

Коммуникативная компетенция реализуется в процессе решения следующих практических задач: формирование прочных орфографических и пунктуационных умений и навыков; овладения нормами русского литературного языка и обогащения словарного запаса и грамматического строя речи учащихся; обучение школьников умению связно излагать свои мысли в устной и письменной форме.

Изучение каждого раздела, каждой темы содействует развитию логического мышления и речи учащихся. Развитие речи учащихся на уроках русского предполагает совершенствование всех видов речевой деятельности (говорения, слушания, чтения и письма).

Система оценивания в конце изучения каждой темы предусматриваются зачетные уроки, тестирование, творческие и контрольные работы.

Содержание образования


Введение (1 ч)

Функции русского языка в современном мире

Оценка обучающих работ

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

При оценке обучающих работ учитываются:

1) степень самостоятельности учащегося;

2) этап обучения;

4) четкость, аккуратность, каллиграфическая правильность письма.

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

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

Рабочая программа

По русскому языку

Для 8 класса

Пояснительная записка

Рабочая программа по русскому языку составлена в соответствии сфедеральным компонентом государственного стандарта общего образования, одобренного совместным решением коллегии Минобразования России и Президиума РАО от 23.12.2003 г. № 21/12 и утвержденного приказом Минобрнауки РФ от 05.03.2004 г. № 1089 и приказом Министерства образования и науки Российской Федерации от 30 августа 2010 года № 889 «О внесении изменений в федеральный базисный учебный план и примерные учебные планы для образовательных учреждений Российской Федерации, реализующих программы общего образования, утвержденные приказом Министерства образования Российской Федерации от 9 марта 2004 года № 1312.

За основу рабочей программы взята авторская программа по русскому языку для 5 – 9 классов М.Т.Баранова, Т.А.Ладыженской, Н.М.Шанского, которая полностью соответствует новым образовательным стандартам по русскому языку и входит в состав УМК.

Изменения, внесённые в авторскую учебную программу и их обоснование

В авторской программе по русскому языку для 5 – 9 классов М.Т.Баранова, Т.А.Ладыженской, Н.М.Шанского на изучение русского языка в 8 классе отведено 102 часов, а в рабочей программе – 105 часов, так как в базисном учебном плане на изучение русского языка в 8 классе отводится 3 часов в неделю, а в учебном году 35 рабочих недель.

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

Содержание Часов в авторской программе Часов в рабочей программе
Введение
Повторение пройденного в 5-7 классах 6+2 5+2
Словосочетание
Простое предложение 3+1 1+1
Главные члены предложения 6+2
Второстепенные члены предложения 6+2 8+4
Простые односоставные предложения 9+2 8+3
Неполные предложения
Однородные члены предложения 12+2 8+3
Обращения, вводные слова и междометия 9+2
Обособленные члены предложения 18+2 13+6
Прямая и косвенная речь 6+1 5+4
Повторение и систематизация пройденного в 8 классе 5+1 16+2
Итого

Реализовать поставленные цели предполагается посредством использования учебно-методического комплекта:

Место предмета в учебном плане.

Федеральный базисный учебный план для образовательных учреждений Российской Федерации предусматривает обязательное изучение русского (родного) языка в VIII классе – 105 часов(3 часа в неделю).

Свидетельство и скидка на обучение каждому участнику

Зарегистрироваться 15–17 марта 2022 г.

Большую часть программ мы с вами получаем в готовом виде. Но даже при большом желании ее изменить не получится – практически все программы остаются интеллектуальной собственностью разработчика и защищены законом об авторском праве. Впрочем, дело не в законах: ведь куда легче найти подходящую программу, чем вносить изменения в готовый продукт. Впрочем, существуют как минимум две категории программ, где пересборка и модификация всячески приветствуются, если не авторами, то благодарными пользователями.

Программы, распространяющиеся по принципу Open Source (открытых исходников): они изначально построены таким образом, чтобы вносить в них изменения мог бы любой желающий. Open Source-программы давно появились на платформе Windows, и их гораздо больше, чем вы думаете:

Почтовый клиент Thunderbird.

Офисный набор Open Office.

Файлообменный клиент eMule.

2. Portable-версии

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

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

А вот и современная windows 8. изменился дизайн и создана она, в основном, для мобильных устройств (хреновато работает со старыми программами).

Свеженькая windows 10 (windows 9 не было и сразу скакнули в десятку). Система новая и не проверенная. Говорят — меню Пуск вернули.

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

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

Офисные программы – это приложения, которые позволяют создавать и редактировать разнообразные графические, текстовые документы, базы данных и прочие файлы, которые используются офисными работниками во время работы. В таких файлах содержатся данные о деятельности компании, ее финансовом состоянии. Чем сложнее предприятие, тем сложнее данные и программное обеспечение для работы с ними. Типичный представитель — пакет Microsoft Office. Он платный, но пытливый ум всегда найдет в интернете и расколотую(сиречь пиратскую) версию.

Модификация программ учебных предметов. При составлении адаптированной образовательной программы по общеобразовательным предметам для детей с особыми образовательными потребностями необходимо предусмотреть: частичное выполнение общей учебной программы в соответствии с возможностями учащегося, снизить объем и глубину изучаемого материала; пересмотреть учебные достижения по каждому предмету (кроме тех, которые не вызывают затруднений у ученика), требования к достижениям должны быть четко сформулированы; снизить требования к усвоению второстепенного материала, оставив неизменными требования к основному материалу учебного курса; определить время, необходимое для изучения каждой темы; предусмотреть, в случае необходимости, пропедевтические периоды.

Разработка программ

Читайте также: