البداية > خواطر مبرمج, شروحات > Object Oriented Engineering

Object Oriented Engineering


في البداية أود أن أحذر القراء من طول تلك المقالة (1833 كلمة) حتى لا يفاجئوا بهذا الأمر  .. لكنها تحتوى على بعض المعاني التي قد تهمك كثيراً .. و قد قمت بتقسيم الموضوع إلى عدة وحدات يمكنك أن تقرأ منها ما تشاء ..

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

عندما يقوم أي شخص بتصميم نظام كامل متكامل فلا شك أنه سيكون بحاجة إلى العديد من التخصصات الهندسية .. كما أنه سيقوم بتحديد وظيفة كل مهندس .. و قد إختلف العديد من الناس في إسلوب التعبير عن مخطط أي مشروع كبير أو صغير إلا أنهم قد إتفقوا على مبدأ عام و هو الرسم الصندوقي أو الرسم التخطيطي أو ما يعرف بالـBlock Diagram. و لكي نقوم بتوضيح الأمر أكثر سنأخذ مثالاً بسيطاً .. تخيل أننا نريد أن نصمم غواصة ذكية مثلاً .. هذه الغواصة تحتاج إلى مصدر للطاقة و ربما إحتاجت إلى مولد للطاقة أيضاً .. ربما تحتاج كذلك إلى نظام إرسال و إستقبال البيانات حيث تستقبل الأوامر و ترسل البيانات .. كما أنها ستحتاج إلى أجهزة لإلتقاط البيانات مثل إلتقاط الصور و تحديد مكان الغواصة و عمق و كثافة المياة و حرارتها إلى غير ذلك .. و الأهم من كل ذلك هو المحركات التي تقوم بتحريك الغواصة .. و يقوم بالتحكم في كل ذلك وحدة التحكم و الذكاء الإصطناعي .. إذا أردنا أن نقوم برسم النظام ككل ربما يخرج لنا شكل مثل هذا :

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

سنجد أن كل وحدة قد يكون لها علاقة بوحدة آخرى و قد لا يكون .. تلك العلاقة قد تكون أن الوحدة الأولى تعطي شئ للوحدة الثانية و قد تكون الوحدة الأولى تأخذ منها شئ و قد يكون الإثنان (حسب إتجاه السهم) .. و هذه العلاقة نسميها الواجهة interface التي تكون عند كل وحدة .. تشتمل واجهة كل وحدة على المدخلات و المخرجات التي تدخل و تخرج من الوحدة .. هنا مثلاً سنجد أن وحدة الإرسال و الإستقبال لديها واجهتان .. الواجهة الأولى بينها و بين وحدة الطاقة .. و الواجهة الثانية بينها و بين وحدة التحكم .. و حينما نقوم بوضع الواجهة فإن الوحدات التي تستخدم تلك الواجهة تتفق على بعض الأشياء .. فيقوم مصمم وحدة الإرسال و الإستقبال بالإتفاق مع مصمم وحدة الطاقة على الفولت الذي يريد و هل يريده تياراً متردداً أم مستمراً و يقوم بإعطاءه مكافئ ثيفينن Thevinin Equivalent أو يعطيه البيانات التي يستخرجها منه .. المهم أن يعرف مصمم وحدة الطاقة الحمل الكلي Total Impedance  لوحدة الإرسال و الإستقبال و يعرف منه أقصى تيار و أقصى طاقة يمكن أن تستهلكها تلك الوحدة .. و أما عن الواجهة الثانية مع وحدة التحكم فهي واجهة بيانات .. ربما تكون تلك البيانات رقمية Digital و ربما تكون تماثلية Analog .. لنفترض أن وحدة الإستقبال سوف تستقبل بيانات تماثلية Analog .. كيف ستدخل تلك البيانات على وحدة التحكم الرقمية ؟؟ .. إذا كانت واجهة إحدى الوحدات تختلف عن واجهة وحدة آخرى فإننا نقوم بوضع وحدة وسيطة بين الإثنين تقوم بتحويل من واجهة لواجهة آخرى .. فنضع في تلك الحالة وحدة التحويل من رقمي إلى تماثلي و العكس Analog to Digital Converter ..

و بعد أن نكون قد إنتهينا من وضع كل الوحدات المطلوبة و معرفة العلاقات بين كل الوحدات .. نقوم بتقسيم المهام حيث سيتولى المتخصصين في هندسة الإتصالات و الإلكترونيات بتصميم وحدة الإرسال و الإستقبال و يقوم مهندسي الحاسب بتصميم وحدة التحكم و الذكاء الإصطناعي و يتولى مهندسي الميكانيكا تصميم المحركات .. إلخ. غير أن هذا التصميم لن يكون سوى إعادة للمرحلتين السابقتين فسنقوم بفك كل وحدة إلى رسم تخطيطي Block Diagram آخر .. فوحدة الإرسال ستكون عبارة عن وحدة لعمل التعديل على الموجة الداخلة Modulation و الخارج يدخل إلى وحدة الإرسال و هي الهوائي Antenna. و بعد ذلك نقوم بفك وحدة التعديل Modulation إلى وحدة ضرب Multiplier و وحدة توليد الموجة الحاملة Carrier Signal حيث تدخل الموجة التي فيها البيانات و الموجة الحاملة إلى وحدة الضرب Multiplier و منها إلى وحدة مرشح النطاق Band Pass Filter .. هكذا سنفعل في كل الوحدات .. نقوم بتفكيك كل وحدة إلى مجموعة وحدات آخرى .. حتى متى سنفعل ذلك ؟؟ حتى نصل إلى بعض الوحدات التي لا يمكن تفكيكها نظراً لأننا سوف نشتريها كما هي و لن نقوم بتصميمها .. فعلى سبيل المثال ربما نشتري دائرة تكاملية Integrated Circuit لتعمل كمكبر Amplifier مثلاً و لذلك لن نقوم بتفكيكها .. و في هذه الحالة سنضطر إلى معرفة واجهة تلك الوحدة عن طريق ورقة البيانات Datasheet .. كما يمكننا أن نفكك الوحدات حتى نصل إلى وحدة بها مقاومات و ترانزيستورات و حينها لن نقوم بتفكيك الترانزيستور إلى مستوى أشباه الموصلات Semiconductor Level ..

الملخص و بعض التعريفات :

الرسم التخطيطي Block Diagram : هو رسم يوضح القواعد الأساسية لأي تصميم و أي نظام و يصف العلاقات بين الوحدات التي فيه بدون تفاصيل.

الوحدات Units or Blocks : الوحدة عبارة عن كائن (قد يكون دائرة كهربائية أو ماكينة أو أي شئ) لا ندري شيئاً عن تفاصيله الداخلية إلا أننا نعرف الوظيفة التي يقوم بها.

الواجهات interfaces : الواجهة هي أي شئ نستطيع أن نتعامل من خلاله مع الوحدات أياً كان هذا الشئ (أسلاك , هوائي Antenna , كاميراً , ميكروفون .. إلخ). و تتضمن الواجهة نوعية الأشياء التي تدخل إليها و عددها و أي شئ يهم الوحدات الآخرى التي سوف تتعامل مع تلك الوحدة. يكون ضمن الواجهة بعض المدخلات و بعض المخرجات.

المخرجات Output : إذا كان عندنا وحدة لها مخرجات .. فمعنى ذلك أن تلك الوحدة هي التي تتحكم مباشرةً بتلك المخرجات .. بغض النظر عن إتجاه التيار أو الفولت أو غير ذلك.

المدخلات Input : إذا كان عندنا وحدة لها مدخلات .. فمعنى ذلك أنها ليس هي التي تتحكم تحكم مباشر بتلك المدخلات و إنما تنتظرها من وحدة آخرى أو من العالم الخارجي .. أيضاً بغض النظر عن إتجاه التيار أو الفولت أو غير ذلك.

التحويل Conversion : بما أن كل وحدة لها واجهة تتعامل مع الوحدات الآخر عن طريقها .. كثيراً ما نجد أن بعض الوحدات تريد أن تتعامل مع وحدات آخرى غير أنهم يستخدمون واجهات مختلفة .. حينها نضع وحدة وسيطة بينهم تقوم بالتحويل بين تلك الواجهات.

مستوى Level : عندما كان عندنا في البداية رسم تخطيطي للنظام بشكل عام كان هذا هو أعلى مستوى للتصميم .. و كلما قمنا بتفكيك كل وحدة فهذا يعني أننا ننخفض بالمستوى.

من فوائد الرسم التخطيطي Block Diagram :

  1. يسهل علينا تنظيم العمل الجماعي Team Work حيث تقوم المجموعة في البداية بالإتفاق على الوحدات المطلوبة و يقوم كل فرد بتصميم وحدة و يتفق على الواجهات.
  2. يسهل علينا إكتشاف و إصلاح العيوب حيث سنقوم بإختبار كل وحدة على حداها لنعرف أين يوجد العيب بالضبط.
  3. يسهل علينا عملية تطوير النظام حيث سنقوم بإزالة الوحدة التي نقوم بتطويرها و نضع مكانها الوحدة الجديدة المطورة و بما أننا قد إلتزمنا بالواجهة فإن النظام لن يتأثر سلباً و إنما سيتأثر إيجاباً.
  4. طريقة التفكير بهذا الشكل تساعدنا على تخيل فكرة عمل أي نظام و أي تصميم حتى لو كان يبدوا مبهراً أو معقداً أو معجزاً.

أنظر أيضاً :

  1. توجد نظرية في البرمجة تسمى البرمجة الشيئية أو البرمجة غرضية التوجه Object Oriented Programming تقوم بإستخدام نفس طريقة التفكير حيث تقوم بتقسيم ما يحتاج إليه البرنامج من خوارزميات و دوال و قواعد بيانات و كل كائنات البرنامج إلى أصناف Classes و كل صنف يمكن أن يستخدم واجهة implement interface .. و سنجد أن مميزات هذا النوع من البرمجة هي هي نفس المميزات التي ذكرناها الآن حيث ستجد أنك إذا أردت أن تطور عمل أي جزء في البرنامج فإنك تقوم بتطويره بسهولة و تستطيع أن تكتشف الأخطاء و تعالجها بسهولة  و تستطيع أن تنظم العمل الجماعي بسهولة كذلك.
  2. توجد فكرة مشابهة و هي التخطيط الإنسيابي Flow Chart إستعملت لكي تصف العمليات و الخطوات المنطقية في العديد من المجالات مثل الصناعة حيث كانت تستعمل فيها حين بدأت فكرتها عام 1921 و إستعملت بعد ذلك في البرمجة لوصف مراحل و خطوات البرامج و الخوارزميات .. و بنفس المنطق يمكننا من خلال الرسم الإنسيابي Flow Chart أن نزيل الجزئية التي نريد أن نطورها و نضع مكانها جزئية آخرى بعد أن طورناها بعد أن نكون قد إلتزمنا بالوظيفة التي وضعت تلك الجزئية من أجلها.
  3. يوجد العديد من أشكال الرسم التخطيطي مثل الصندوق الأسود Black Box و رسم إنتقال البيانات Data Flow Diagram و الرسم التخطيطي للدوال Functional Block Diagram و رسم العلاقات بين الكائنات Entity Relationship Diagram و غير ذلك من الأشكال المتعددة لوصف الأنظمة و لتسهيل عملية التصميم و كل صورة من تلك الصور لها إستخدامتها و تطبيقاتها .. كل ما فعتله هو أني أعطيتك الفكرة العامة و أداة تستطيع من خلالها أن تنظم الأعمال التي تحتاج إلى فريق أو حتى تلك التي تقوم بها وحدك.

لهذا السبب ..

  1. لهذا السبب يقوم طالب الهندسة بدراسة بعض المواد التي تخرج عن تخصصه .. على سبيل المثال يقوم طالب هندسة الحاسب الآلي بدراسة نظريات الإتصالات .. صحيح أنه لن يقوم بتصميم دوائر الإرسال و الإستقبال إلا أنه سيتفق مع من سيصممهم على نوعية البيانات و تردداتها و نطاقها Bandwidth و غير ذلك .. إذا كان يجهل معنى تلك الأشياء فكيف سيتعامل معها حتى التعامل الخارجي ؟؟ .. نفس الكلام ينطبق على دراسة المواد الآخرى مثل الآلات الكهربية و التحكم و الميكانيكا و غير ذلك ..
  2. لهذا السبب عندما يدرس أحد المحاضرين للطلبة يقول لهم أن عندنا مدخلات قيمتها كذا و كذا .. و نحن نتسائل من أين ستأتي تلك المدخلات و كيف إلى غير ذلك من التساؤلات .. لو كان أخبرهم من البداية أن هناك رسم تخطيطي Block Diagram و أنك تقوم بتصميم إحدى وحداته لكان الأمر أوضح من ذلك ..
  3. لهذا السبب كانوا يخبروننا أن في شركات البرمجة يقوم أكثرهم خبرة بعمل الرسم التخطيطي أو الرسم الإنسيابي Flow Chart للبرنامج و المبرميجن الأقل خبرة يقومون بتنفيذ البرنامج و كتابة الكود .. ربما تعجب البعض من ذلك حيث كان يظن في البداية أن كتابة الكود هي العملية التي تحتاج إلى خبرة أكثر ..
التصنيفات:خواطر مبرمج, شروحات

اترك رد

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / تغيير )

Twitter picture

You are commenting using your Twitter account. Log Out / تغيير )

Facebook photo

You are commenting using your Facebook account. Log Out / تغيير )

Connecting to %s

Follow

Get every new post delivered to your Inbox.