Добро пожаловать на страницы
CS.CSprogtech. Эти страницы посвящены разработке и обсуждению материалов по курсу "Техники программирования", читаемом в МФТИ. Ниже приводится
программа этого курса.
Техника программирования
Устюжанин А.Е., кафедра информатики МФТИ
Описание
Курс "Техника Программирования" читается в МФТИ с 2003-его года. Основной аудиторией курса являются студенты 3-его курса х73 и х31 групп. Цель данного курса - знакомство студентов с технологиями разработки программного обеспечения (ПО), которые включают все этапы жизненного цикла продукта. В ходе курса рассматриваются наиболее распространенные модели процессов работы над программным обеспечением: Waterfall model, Rational Unified Process, eXtreme Programming. Излагаемый материал активно использует язык моделирования UML, который используется как для описания структурных схем, так и для описаня динамических взаимодействий.
Технологически курс построен вокруг Common Layer Infrastructure, стандартизированной в ECMA и ее реализацией компанией Microsoft - Microsoft .NET Framework. Рассматриваются такие аспекты построения системы как разработка архитектуры системы с использованием шаблонов проектирования, оформления исходного кода, документация исходного кода, создание тестирующих приложений. В ходе разработке учебных проектов студенты затрагивают такие темы как
- разработка консольных приложений
- разработка графических приложений WindowsForms?
- взаимодействие приложений с файловой системой
- сетевое взаимодействие приложений (Sockets, .NET Remoting)
- сериализация/десериализация
- использование многопоточности
Специальное внимание уделено разработке безопсаных приложений. С целью создания безопасных приложений студенты знакомятся как с основными подходами для разработки безопасных архитектур так и с частными случаями угроз наиболее распространенными на сегодняшний день.
Теоретические материалы подкреплены практической работой, в ходе которой каждому студенту предлагается либо разработать собственный проект, либо подключиться к существующему open-source проекту (
SourceForge,
CodeProject или
CodeGuru).
Программа курса
Теория | Практика |
1. Жизненный цикл ПО. Разработка требований. Основные роли участников проекта |
2. Архитектура платформы .NET Framework | Выбор тем курсовых проектов |
3. UML как основной язык проектирования. Разработка архитектуры приложения |
4. Знакомство с языком C#. Основные типы. Массивы. Классы. Строки. | Консольные приложения на языке C# |
5. C#. Свойства, интерфейсы, делегаты, события, исключения. Использование исключений. Событийная модель управления приложением | Разработка графического приложения |
6. Работа с потоками. Файлы. Сетевые соединения | Разработка приложений, взаимодействующих по сети |
7. Введение в использование шаблонов проектирования. Шаблон Model-View-Controller. Шаблон Factory. Многопотоковое приложение. Механизмы синхронизации | Разработка многопотокового приложения |
8. Технология .NET Remoting. Application Domain. Application Context. Шаблон publisher/subscriber | Взаимодействие по сети с использованием механизмов .NET Remoting |
9. Общие подходы к разработке безопасных приложений. Основные типы уязвимостей и угроз. Шаблон CommandProcessor? | Модификация приложения для поддержки client-server архитектуры |
10. Механизмы безопасности .NET Framework | Модификация приложения для поддержки P2P архитектуры |
11. Основы архитектуры расширяемого приложения. Шаблоны Command, Strategy, Chain of Responsibility, Observer, Visitor | Поддержка плагинов для сериализации сетевого трафика приложения |
12. Использование .NET Reflection API. Шаблоны Abstract Factory, Factory Method, Prototype | Разработка самомодицифирующегося приложения |
Практические задания
- Разработка консольного приложения
- Разработка GUI приложения (WinForms?)
- Разработка собственного обработчика-редактора поля для PropertyView?
- Разработка многопоточного приложения
- Разработка многомодульного приложения
- Приложение передачи информации через UDP Sockets
- Приложение передачи информации через TCP Sockets
- Приложение передачи информации через .NET Remoting
- Приложение защищенной передачи данных с использованием CryptoAPI?
- Интеграция .NET приложения с приложением стороннего разработчика (Matlab)
Ресурсы
Ресурсы даннго курса подробно описаны в
CourseResources.
Текущий список рассылки:
cs-progtech-04@cs.miptNOSPAM.ru
Весовые коэффициенты зачетной оценки работы студента
Деятельность | Вес  |
Идея/Описание/Требования | 10 |
Исходники/Документация | 10 |
Участие/работа в классе | 20 |
Ответы на вопросы зачета | 20 |
Работоспособность | 40 |
Курсовой проект |
В случае сдачи группового проекта, первые два пункта оцениваются индивидуально, а баллы за курсовой проект распределяются между участниками по их собственному усмотрению.
NB Для сравнения можно ознакомиться с
системой оценок, используемой в дореволюционной России.
Пожелания к программе курса
NB никто не отменял закона о необъятном, охватить которое за конечное время невозможно.
- Более подробно остановиться на разработке собственных Contols
- Вкратце рассмотреть interop facilities для общения с COM объектами
- Подробнее описать технику работы с Applicatoin Domain
- Остановиться на особенностях работы с "опасным" кодом
- Описание features .NET Framework v 2.0
- Более подробно рассказать о физическом взаимодействии .NET с операционной системой. В частности, описать алгоритмы работы Garbage Collector-a.
- А как же тестирование приложения?!? NUnit?
- Test-First Approach?
- Документация приложения - XML doc, NDoc.
Appendix A. Raw module list
- ApplicationDomainModule
- Application domains provide a more secure and versatile unit of processing that the common language runtime can use to provide isolation between applications. Application domains are typically created by runtime hosts, which are responsible for bootstrapping the common language runtime before an application is run.
- AssemblyModule
- Assemblies are the building blocks of the .NET Framework; they form the fundamental unit of deployment, version control, reuse, activation scoping, and security permissions. An assembly provides the common language runtime with the information it needs to be aware of type implementations. It is a collection of types and resources that are built to work together and form a logical unit of functionality. To the runtime, a type does not exist outside the context of an assembly.
- AsyncProgrammingModule
- With .NET asynchronous programming, a call is made to a .NET class method while the program continues execution, until either the specified callback is made or, if the callback is not provided, until blocking or polling or waiting for the call to complete. For example, a program can call a method, which enumerates a large list, while the main program continues to execute. When the enumeration is complete, a callback is made, and the program addresses it.
- DesignPatternIntroModule
- Why patterns, you may wonder. Why patterns and why not a method of object-oriented design and an introduction in one or more object-oriented languages? The answer is simple. Patterns bookmark effective design. They fill the gap between the almost infinite possibilies of object-oriented programming languages and tools and the rigor of methodical design. As Brian Foote expressed it in POPL3, patterns are the footprints of design, paving the way for future designs. They provide a common design vocabulary and are also helpful in documenting a framework. And, as we will see later, patterns may also act as a target for redesign, that is when the current design no longer offers the desired functionality and flexibility.
- DocumentationModule
- В этом модуле рассматривается один из наиболее важных аспектов напсиания ПО: сопровождение программы адекватной документацией. Этот аспект зачастую умалчиваемается или молчаливо подразумеваемается, как в коммерческих так и в академическиз проектах. Здесь мы постараемся затронуть как общечеловеческие аспекты составления документации так и технические средства, которые могут помочь в оформлении убедительных доводов в пользу применимости решения.
- DotNetArchitectureModule
- В этом модуле-презентации очерчены основные понятия связанные с .NET Framework. Описаны основные архитектурные принципы, лежащие в основе .NET. Проведены параллели между коммерческой реализацией .NET и соответствующими стандартами (среда выполнеиня и язык выполнения). Продемонстрирован язык MSIL и ocoбенности работы со сборками, как основными строительными блоками приложения.
- DotNetRemotingModule
- .NET remoting enables client applications to use objects in other processes on the same computer or on any other computer available on its network. You can also use .NET remoting to communicate with other application domains in the same process. .NET remoting provides an abstract approach to interprocess communication that separates the remotable object from a specific server and client process and from a specific mechanism of communication. As a result, it is flexible and easily customizable.
- ManagedCppModule
- В этом разделе рассматриваются различные варианты интеграции C# (.NET) приложения с C++ кодом. а) программа на C++ обернута в managed-код на C++, который вызывается из C#, б) программа на C++ использует функциональность .NET и с) программа на C# вызывает неуправляемый код C++ напрямую
- NetworkingModule
- The Microsoft .NET Framework provides a layered, extensible, and managed implementation of Internet services that can be quickly and easily integrated into your applications. Your applications can build on pluggable protocols to automatically take advantage of new Internet protocols, or they can use a managed implementation of the Windows socket interface to work with the network on the socket level.
- SecurtyBasicsModule
- TODO: write summary
- ThreadingModule
- Whether you are developing for computers with one processor or several, you want your application to provide the most responsive interaction with the user, even if the application is currently doing other work. Using multiple threads of execution is one of the most powerful ways to keep your application responsive to the user and at the same time make use of the processor in between or even during user events.
- WorkingWithIOModule
- There are network, memory, and tape streams. Class
Stream
unifies methods for working with various kinds of IO. This section describes main principles and techniques lying behind working with IO in .NET Framework.
NB: Большинство материалов, находящихся в данной сети, процитированы из источников MSDN, O'Reilly Network. В противном случае сыслки на источники указываются отдельно.
--
AndreyUstyuzhanin - 25 Mar 2004