public static void A_EncapsulationAsBindingTogetherDataAndFunctions()
        {
            var color       = "Yellow";
            var specialGift = new SpecialFilledAndDecoratedGiftBox(2, color);

            // The color is a data of specialGift object.
            // It is stored in the field and protected from corruption by the property Color.
            // We cannot override data with incorrect value.
            specialGift.Color = string.Empty;

            specialGift
            .Color
            .Should()
            .Be(color);

            // The gift is a data of specialGift object too.
            // It is stored in the field and protected from corruption and incorrect filling by the method PackGift.
            // We cannot override data or store an incorrect one.

            Action packNothing = () => specialGift.PackGift(null);

            packNothing.Should().Throw <ArgumentException>();

            specialGift
            .PackGift("Tale");

            Action packAgain = () => specialGift.PackGift("Poem");

            packAgain.Should().Throw <InvalidOperationException>();
        }
        public static void B_EncapsulationAsHidingOfRealization()
        {
            var deliveryService = new DeliveryService();
            // We do not know, how delivery service works,
            // we give them our package and they must to deliver it.

            var smallSpecialGift = new SpecialFilledAndDecoratedGiftBox(2, "Yellow");

            deliveryService.DeliverGift(smallSpecialGift);

            var bigSpecialGift = new SpecialFilledAndDecoratedGiftBox(17, "Red");

            deliveryService.DeliverGift(bigSpecialGift);
        }