سؤال

لا أفهم تمامًا المغزى من وجود رأسية؛يبدو أنه ينتهك مبدأ DRY!جميع المعلومات الموجودة في الرأس موجودة (يمكن) في التنفيذ.

هل كانت مفيدة؟

المحلول

يبسط عملية التجميع. عندما تريد ترجمة وحدات بشكل مستقل، فأنت بحاجة إلى شيء لوصف الأجزاء التي سيتم ربطها دون الحاجة إلى استيراد مجمل جميع الملفات الأخرى.

كما يسمح باختباء التعليمات البرمجية. يمكن للمرء أن يوزع رأس للسماح للآخرين باستخدام الوظيفة دون الحاجة إلى توزيع التنفيذ.

أخيرا، يمكن أن يشجع الفصل بين الواجهة من التنفيذ.

إنها ليست هي الطريقة الوحيدة لحل هذه المشكلات، ولكن قبل 30 عاما كانت جيدة. ربما لن نستخدم ملفات الرأس للغة اليوم، لكنها لم يتم اختراعها في عام 2009.

نصائح أخرى

إن مهندسي العديد من اللغات الحديثة مثل Java و Eiffel و C # أتفق معك - هذه اللغات استخراج البيانات الوصفية حول وحدة نمطية من التنفيذ. ومع ذلك، في حد ذاته، فإن مفهوم الرؤوس لا يمنع ذلك - من الواضح أنه سيكون له مهمة بسيطة للمترجم لاستخراج أ .h ملف أثناء تجميع أ .c, ، على سبيل المثال، تماما مثل التحويل البرمجيات لهذه اللغات الأخرى التي تقوم بها ضمنيا. حقيقة أن المترجم C النموذجي الحالي C لا تفعل ذلك ليس مشكلة تصميم اللغة - إنها مشكلة في التنفيذ؛ يبدو أنه لا يوجد طلب من المستخدمين لمثل هذه الميزة، لذلك لا يزعج البائع المترجم ينفذ ذلك.

كاختيار تصميم اللغة، بعد فصل .h يمنحك الملفات (بتنسيق نص قابل للقراءة وإنسانية) أفضل ما في العالمين: يمكنك البدء في تجميع رمز العميل بشكل منفصل استنادا إلى تطبيق وحدة نمطية غير موجودة بعد، إذا كنت ترغب في ذلك، من خلال كتابة .h ملف باليد؛ أو أنت (على افتراض أنه سخيف تنفيذ مترجم يوفره ؛-) يمكن الحصول على .h ملف تلقائيا من التطبيق كأثر جانبي لتحقيقه.

إذا كانت C، C ++، & C، فاستمر في المزدهرة (على ما يبدو أنها لا تزال بخير اليوم ؛-)، والطلب مثل لك كتابة رؤوس الكترون يدويا، سيتعين على كتاب التحويل البرمجي في نهاية المطاف لتزويد خيار "جيل الرأس"، و " أفضل ما في العالمين "لن يبقى نظرية! -)

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

أي شيء خفض الفضاء أو كان تعقيد الوقت من التجميع فوزا كبيرا. ورؤوس القيام كليهما.

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

الاستفادة من المصدر والأوثائق الرئيسية والوثائق الإضافية في المزامنة لا تزال علامة أخرى من الديدان ...

كان من الصعب فهم فكرة فحص ملفات الإخراج الثنائية لمعالجات اللغة بالكامل عندما تم اختراع لغة C .h ملفات.كان هناك نظام يسمى مرح لقد فعلت شيئًا كهذا، لكنها كانت غريبة ومقتصرة بشكل أو بآخر على المشاريع العسكرية.(لم أشاهد برنامج JOVIAL من قبل، سمعت عنه فقط).

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

لذا فإن فكرة جعل المترجم يفهم بالفعل الشيء الذي كنت تتصل به كانت جديدة إلى حد ما.

حتى اليوم، إذا قمت بضربة رأسية زائفة تمامًا، فلن يتمكن أحد من اللحاق بك في أغلب الأحيان المترجمين AOT.الأشياء الذكية مثل لغات CLR وJava تقوم بالفعل بتشفير الأشياء في ملفات الفصل الدراسي.

لذا، نعم، على المدى الطويل، ربما لن يكون لدينا ملفات رأسية.

لا يوجد لديك رؤوس في Java - ولكن لديك واجهات وتوصي كل جافا جافا خطيرة بتحديد أي شيء يستخدمه المشاريع / الأنظمة الأخرى كواجهة وتنفيذ.

يتيح لك رؤية تعريف واجهة Java يحتوي على توقيعات المكالمات، واكتب التعريفات والمصروفات.

تحتوي معظم ملفات رأس C تواقيع المكالمات، اكتب تعريفات وثوابت.

لذلك لجميع الأغراض Pratical C / C ++ ملفات الرأس هي مجرد تعريفات واجهة وينبغي اعتبارها شيئا جيدا. الآن أعرف أنه من الممكن تحديد عدد لا يحصى من الأشياء الأخرى في ملفات الرأس وكذلك (MARCROS، الثوابت وما إلى ذلك) ولكن هذا مجرد جزء من العالم الرائع بالكامل من C: -

int function target () {
    // Default for shoot
    return FOOT;
}

للحصول على التفاصيل هذه

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

تعلن مكتبة C قياسي ومكتبة قياسية C ++ تقليديا وظائفها القياسية في ملفات الرأس.

وماذا كنت ترغب في إعطاء شخص آخر الإعلانات لاستخدام مكتبتك دون منحهم التنفيذ؟

كما يشير إجابة أخرى - كان السبب الأصلي للرؤوس هو جعل تحليل / تجميع أسهل على المنصات بأدوات بسيطة ومحدودة للغاية. لقد كانت خطوة رائعة إلى الأمام للحصول على آلة مع 2 Floppies حتى تتمكن من الحصول على برنامج التحويل البرمجي على واحد وعلى الكود الخاص بك على الأشياء الأخرى أسهل بكثير.

عند تقسيم التعليمات البرمجية في رأس الملفات والملفات المصدر التي تقسم الإعلان وتعريفها. عند البحث في ملفات الرأس، يمكنك معرفة ما لديك، وإذا كنت عصا لرؤية تفاصيل التنفيذ، فانتقل إلى الملف المصدر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top