sidristij/dotnetbook

Заглавное изображение IDisposable

sidristij opened this issue · 4 comments

ТЗ Иллюстратору:

Высота рисунка - около 7 сантиметров. Ширина - А4 альбом. Фон - белый, рисунок - для чёрно-белой печати. Выглядеть на странице будет так: рисунок, название главы, текст.

Глава: Шаблон Disposable (Disposable Design Principle)

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

image

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

.NET Framework, который я описываю - это некоторая песочница. Некий... виртуальный компьютер внутри настоящего. Это система абстрагирования той программы, что вы написали от внешнего мира. Нет разницы, под Windows вы запустите код или под Linux или под чем-либо еще. Вашей программе всё равно, где работать. Ей даны унифицированные средства связи с внешним миром: жестким диском, клавиатурой, монитором и прочими устройствами. Также на каждую подсистему могут даны или отозваны права пользоваться этим: жестким диском, интернетом, отдельным сайтом. Программа, написанная под .NET Framework работает под строгим контролем этой системы.

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

Любая программа состоит из двух основ: действие (сам код программы) и то, над чем это действие осуществляется (оперативная память, устройства, файловая система). Куски памяти, где мы храним данные нам, программистам, охота как-то назвать, придумать абстракции. Наделить смыслом (мы же люди и общаемся прежде всего в реальном мире), чтобы с этим было проще работать. Эти объекты в виде абстракций - это части программы, единого механизма. Т.к. в программе всё друг с другом взаимодействует (есть места с сильным, бурлящим взаимодействием, когда эти объекты группами общаются друг с другом. А есть со слабым - когда сообщения доходят до этих мест только изредка или вообще - однажды), объекты должны быть связаны друг с другом - ссылаться. Связи чаще всего односторонние, но иногда бывают и двусторонние: когда необходима обратная связь.

Описание главы IDisposable. Это то, для чего вы разрабатываете эпилог, заглавное изображение.

После использования часть объектов необходимо разрушать. Чтобы сделать это, у объекта вызывается специальная функция самоуничтожения (только объект знает как его правильно уничтожить). Если объект владел другим объектом, он его также разрушает. Так может каскадом происходить до тех пор, пока все разрушенные объекты не перестанут чем-либо владеть. Можно представить некий граф: где управляемый подрыв одной сущности вызывает каскадное разрушение связанных с ней других, но не затрагивает тех, кто никак с ними не связан. Также важно отметить существование двух миров. Первый - мир .NET Framework. Если что-то находится в этом мире, то .NET Framework этим управляет. Он знает всю структуру каждой абстракции, может их изменять, создавать, разрушать. Наделять их правами или отбирать их у них. И есть неуправляемый мир, внешний мир. Этот мир также состоит из абстракций, которые также после использования необходимо разрушать. Однако .NET Framework ими не владеет. Он ничего о них не знает. Однако часть абстракций внутреннего мира может ссылаться на абстракции внешнего. Например, только абстракции внешнего мира могут работать с жестким диском, с монитором, клавиатурой. А вот абстракции внутреннего мира должны уходить во внешний мир через абстракции внешнего - чтобы получить данные от этих устройств.