سؤال

في خطر من أن تصبح أحمق القرية ، يمكن للشخص أن يفسر لي لماذا الأدوية تسمى الأدوية?أنا أفهم الاستخدام والفوائد ، ولكن إذا تعريف عام هو "العامة" و generic مجموعات هي نوع آمنة ، ثم لماذا هذه تسمية خاطئة?

على سبيل المثال ، ArrayList يمكن أن تعقد أي شيء كائن:

ArrayList myObjects = new ArrayList();
myObjects.Add("one");
myObjects.Add(1);

في حين جمع عام من نوع string يمكن أن تعقد فقط السلاسل:

var myStrings = new List<string>();
myStrings.Add("one");
myStrings.Add("1");

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

أي مساعدة هي موضع تقدير.

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

المحلول

و"عام" يتحدث عن التنفيذ. أن تكتب واحد "عام" تنفيذ القائمة التي تعمل مع أي نوع، بدلا من الاضطرار لكتابة تطبيقات محددة لكل نوع تريد استخدامها.

نصائح أخرى

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

"عامة" في جافا معنى يعود على الأقل إلى منتصف 1970s.الولايات المتحدةوزارة الدفاع شحذ متطلبات وثيقة جديدة لغة البرمجة (ما من شأنه أن تصبح ادا).مبكرة مشروع ("Woodenman", آب / أغسطس 1975) يقول:

تجميع المعلمات في الوقت مطلوبة في للمد اللغات تصريح مواصفات عامة وإجراءات وهياكل البيانات مثل المكدسات و الطوابير دون تكرار التعريف لكل نوع العنصر.

هذا هو فقط استخدام "عامة" في الوثيقة.انها ليست واضحة بالنسبة لي كيف كان المقصود به.ولكن بحلول تموز / يوليه 1977 ("الصفاح") كان هناك فقرة بأكملها على الأدوية و التعبير بوضوح تعني شيئا محددا:

12D.تعريفات عامة

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

بحلول حزيران / يونيه 1978 ("Steelman") تأسست المصطلحات;هناك البعض يستخدم مصطلح "عامة" في أقسام أخرى من الوثيقة تشير بوضوح إلى هذه الميزة.في الانتهاء من اللغة ، generic كانت كلمة محجوزة.

والكتاب من هذه الوثائق المدرجة على الموقع ، وربما الأكثر لا تزال موجودة.سيكون أنيق أن ندعو لهم ونسأل ما تذكر.


أقرب معقول ذات استخدام "عامة" لقد وجدت في الأوساط الأكاديمية في روبن ميلنر هو "نظرية من نوع تعدد الأشكال في البرمجة" (1978) (و يشعر انه مجبر على شرح ما يقصده بـ "العامة" ، لذلك لا يمكن أن يكون في الاستعمال الشائع في الأوساط الأكاديمية في ذلك الوقت):

لذلك هذا هو نوع عام من خريطة, ، أي حدوث خريطة ضمن نطاق هذا الإعلان يجب أن يتم تعيين بعض إحلال سبيل المثال من هذا النوع.

"عامة متغير نوع" أصبح CS المصطلحات.

bool Equals(int x, int y)

والأسلوب أعلاه يمكن أن يقارن فقط صحيحة، لذلك نستطيع أن نقول أنه المتخصصة لمقارنة أعداد صحيحة.

bool Equals<T>(T x, T y);

والأسلوب أعلاه يمكن مقارنة القيم من أي نوع، لذلك يمكننا القول أنه ليس <م> المتخصصة لأي نوع معين - انها <م> عام

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

حسنا خذ هذا مع حبة الملح ، لأنني تماما التخمين ، ولكن أتساءل عما إذا كان قد يكون من الإفساد "توليدي أنواع".

من الناحية النظرية عندما تتخصص قائمة في قائمة< String > ، فإنه يولد نوع جديد.على الأقل هذه هي الطريقة التي يعمل بها في C++ قوالب في C# الوراثة.

في جاوة ، منذ parameterizations يتم التخلص منها من قبل المترجم باستخدام نوع المحو ، فإنه في الواقع لا توليد جديدة متخصصة نوع ، لذلك من يدري ؟

أنا افترض أنك يمكن أن نقول أن جافا تنفذ genericized نسخة من توليدي أنواع :)


على تحرير:

وهنا وجهة نظر أخرى...

نوع القائمة< String > ليس ما نتحدث عنه عندما يشيرون إلى "عامة" نوع.أعتقد المصطلحات هو في الواقع إشارة إلى القائمة< T > النوع الذي هو كم نوع موجود في شكل عام.قائمة< String > تخصص عام قائمة< T >.

إذا وصفوه بأنه "نوع المعلمة (ق)" كان الناس تخلط مع معلمات نوع نوع.

وأيضا، ArrayList ليست "عام". وهو يعمل فقط مع أنواع من الكائنات. إذا كنت تسأل لشيء، وسوف تعطيك مرجع كائن. هذا هو سلوك معين للغاية.

وهناك فئة التي تأخذ الأشياء ليست عامة، فهي جدا أخذ على وجه التحديد <م> نوع الذي هو في حد ذاته نوع عام. وهناك فئة العامة، من ناحية أخرى، ويمكن استخدامها مع أي نوع معين.

ولأنك خلق "عام" التعليمات البرمجية التي سوف تكون قادرة على العمل على أي نوع (ضمن القيود التي تحددها) في نفس الطريق ...

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

وأنا لست "الأم" اللغة الإنجليزية اللغة، لذلك قد أكون مخطئا ولكن نقطة من "الوراثة" هو أن تعريف أنواع الوراثة، أليس كذلك؟

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