post

#21 التغليف Encapsulation – البرمجة بواسطة #C

رمز فتح مرحلة هذا الدرس في تطبيق طورني : RSJ

تَعلُمُ البرمجةِ للمبتدئينَ كلياً بواسطةِ #C – التغليف Encapsulation

ما معنى Encapsulation ؟ و كيف يمكننا حماية اسطر برمجية معينة من التحكم بها و من القراءة بها ؟ ما هي درجات كلمات private و public ؟

تكلمنا سابقاً عن البرمجة كائنية التوجه أن لها ميزات و خصائص معينة و من ضمنها التغليف Encapsulation ، مفهوم Encapsulation ببساطة هو حماية أجزاء معينة من الكود من الوصول إليها من قبل المبرمجين أو الزبائن ، لنعطي مثالاً واقعيا بسيطاً بحيث نوضح موضوع Encapsulation ، تخيل أنك تجلس أمام التلفاز و بيدك جهاز التحكم ، بإمكانك ببساطة الضغط على أحد الازرار ليحدث شيء معين (رفع الصوت ، تغيير القناة ، تغيير الإضاءة ) ، هذه الامور تقسم إلى قسمين :
– القسم الأول هو شيء public و هو متاح لك ، و هو الازرار الموجودة على جهاز التحكم
– القسم الثاني هو private و هو كيفية عمل الأزرار ، عندما نضغط على زر يحدث أمر معين ، نحن لا ندري ما الذي حدث ، فهو قسم مخفي يستخدمه الصانعين
إذا لدينا قسمين ، قسم متاح ، و قسم غير متاح ، نأخذ الآن كود سريع لنوضح الفكرة . نقوم بتعريف كلاس جديد باسم something و نعرف داخله دالتين :

Public void DoSomething()
{

}
Private void HelperMethod()
{

}

في الدالة الـ private سنقوم بطلب طباعة Hello world! ، و في الدالة الـ public سوف نقوم باستدعاء الدالة الـ private
الآن لدي في التطبيق الخاص بي عندما أقوم بتعريف متغير أو object من النوع something
Something s1 = new Something();
لاحظوا إذا كتبت s1 و قمت بالضغط على dot سيعطيني الدالة التي اسمها DoSomething و ليس لدي إمكانية التعامل مع الدالة HelperMethod لأن هذ شيء خاص و داخلي لا يمكنني الوصول إليه، الآن لو تابعنا
S1.DoSomething();
Condole.ReadLine();
و حاولنا تشغيل التطبيق سنلاحظ أنه سيقوم بطباعة الجملة الموجودة في HelperMethod

إستخدام التغليف لتطوير التطبيق

من الممكن أن نرغب بمعرفة عدد ضغطات المستخدم أو معرفة ما قام الزبون باستدعائه ، هنا سنقوم بتعريف متغير من النوع int باسم clickCount ، و نقوم بجعلها في الدالة private
clickCount ++;
لتعتبر الزيادة ، مثلاً عندما يقوم بعمل شيء معين أو يستدعي أداة معينة يزداد هذا العداد بدون معرفة الزبون ، فهو أمر غير مهم بالنسبة له ، كل ما يهتم به هو النتيجة النهائية ، أما أنا كمطور قد يهمني معرفة هذه الأمور و ربما أرغب بعمل تحليل للبرنامج الخاص بي
هناك أنواع أخرى غير public و private و هي protected و internal ، و هما متقدمين على هذه الدورة ، و بإمكانك البحث عنهما بشكل موسع
هذا كان بشكل سريع شرح لدرس اليوم encapsulation و نلقاكم في درس قادم إن شاء الله

الأسطر البرمجية التي قمنا بتنفيذها في هذا الدرس

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PrivatePublic
{
    class Program
    {
        private static string k = "";
        static void Main(string[] args)
        {
            Something s1 = new Something();
            s1.DoSomething();
            Console.ReadLine();
        }
    }

    class Something
    {
        static int clickCount;
        public void DoSomething()
        {
             HelperMethod();
        }
        private void HelperMethod()
        {
            Console.WriteLine("Hello World!");
        }
    }
}

post

لمحة حول ميزات 2019.2 Unity النسخة التجريبية

السلام عليكم ورحمة الله وبركاته ، طرحت شركة unity تسخة تجريبية للإصدار الجديد لمحركها لعام 2019 تحت رقم إصدار 2019.2 ، حيث قامت بذكر أهم الأجزاء التي سيحتويه والتي ستكون مضمنة في النسخة النهائية من الإصدار، حيث سيحتوي الإصدار على الكثير من التحسينات والإضافات الجديدة مثل تحسين الأداء لأجهزة المحمول، وإضافة أداة Polybrush وتسهيل نشر اللعبة على متاجر متعددة بواسطة The Unity Distribution Portal للوصول إلى عدد أكبر من اللاعبين، وتحسين الإضاءة وأدوات الواقع الإفتراضي والمعزز وغيرها الكثير.
يمكن تنزيل النسخة التجريبية من خلال Unity Hub البرنامج المسؤول عن التحكم في النسخ الموجودة في جهازك، مع الأخذ بالحسبان أن هذه النسخة التجريبية قد تحتوي على مشاكل تقنية معينة، حيث تطرح الشركة النسخة ليقوم المطورين بتجريبها وإيجاد أي مشكلة فيها لحلها قبل الإعلان النهائي عن النسخة المستقرة منها.
هنا ذكر لأهم الميزات لهذه النسخة :

تحسينات للأجهزة المحمولة


قامت الشركة بالتعاون مع فريق من شركة Google بتقديم تحسين للألعاب لتبقى على Frame ثابت وهو ما يعرف بإسم Frame Pacing ، وذلك بجعل الفرق بين عدد ال Frames المحسوبة أقل. والنتيجة كانت الحصول على smoother gameplay experience .


بالإضافة إلى ذلك تم تقديم إمكانية تفتيح الشاشة من خلال الخاصية Screen.brightness ، وقامو بإضافة تحديد لحجم الشاشة التي يمكن عرض اللعبة عليها من غير قص منها من خلال خاصية Screen.cutouts ، وهذه الميزة ستكون مفيدة مع الهواتف الجديدة مثل Samsung S10e .

تم إضافة أداة Polybrush


بواسطة هذه الأداة يمكنك الآن التعديل على أي مجسم ثلاثي الابعاد سواءاً كان بسيطاً أو معقداً وذلك بإضافة تفاصيل عليه أو إضافة ألوان أو تعديل الإضاءة التي سيستقبلها كل هذا من خلال نافذة المحرك مباشرة، وهذه الأداة تشبه كثيراً برامج النحت مثل ال Zbrush وغيرها.

مزايا جديدة في إضاءة الـ 2D


تم تحديث وتطوير نظام الإضاءة Lightweight Render Pipeline (LWRP) ، حيث تم إضافة 2D Pixel Perfect وإضافة أنواع إضاءة خاصة بالمجسمات ثنائية الأبعاد، وتم إضافتها أيضاً إلى الـ Shader Graph الخاص بها. وقد تم تفصيل هذا المزايا في مؤتمر GDC 2019


تحديثات الإضاءة


الميزة الخاصة بإزالة ال Noise وبما يعرف بال Denoise الآن أصبحت تعمل على كل الكروت، حيث سابقاً كان بعض الأنواع تعاني منها وبعضها لا يعاني، ايضاً تم تغيير طريقة حساب خرائط الضوء Lightmaps ، حيث بإمكان أي مجسم موجود في المشهد المشاركة في حساب الإضاءة الغير مباشرة global illumination bake ، وتم زيادة سرعة الحسابات خصوصاً إذا تم إستخدام كرت الشاشة في ذلك.

صورة توضح الفرق بين ال Denoising وعدمه
الميزة الجديدة لتفعيل المجسمات من إستقبال الحسابات الخاصة بالإضاءة


أما بالنسبة لتحديثات خرائط الضوء بواسطة كروت الشاشة فهي أصبحت تمتلك الآن :
1 – أكثر من Importance Sampling support لإضاءة المحيط
2 – أصبحت تدعم NVIDIA OptiX denoising
3 – زيادة سرعة الحسابات عندما تستخدم النوع view prioritization او للمجسمات الصغيرة


متاجر عالمية لزيادة اللاعبين


أصبحت يونيتي تدعم بعض المتاجر العالمية لتساعدك بنشر ألعابك عليها وهي ما يعرف بإسم The Unity Distribution Portal (UDP) ، حيث تم التعاقد من بعض المتاجر الكبيرة التي تنافس جوجل ستور وأبل ستور مثل : Catappult/Aptoide, MOO Store, ONE Store, Jio Games Store
مع العلم أن جميع هذه المتاجر تعمل على نظام Android فقط، بمعنى أنك في حال قمت بتطوير لعبة للأندرويد يمكنك ببضع خطوات أن تقوم بإنزال لعبتك على المتاجر المذكورة


AR Foundation


في هذه النسخة هناك العديد من الميزات التي تم إضافتها مثل : face-tracking, 2D image-tracking, 3D object-tracking, and environment probes


هناك العديد من الميزات الأخرى التي يمكنك مشاهدتها في الرابط الأصلي للإعلان عن النسخة هنا :
https://blogs.unity3d.com/2019/05/09/unity-2019-2-beta-is-now-available/