الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

محول الواحدات Storm Units

مغلق
بدأه C&DEL في 23 أكتوبر 2005 · 38 رد · 4,669 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#26

الأخ أبو مازن

اقتباس
كان من الأفضل أن تكون هذه التوابع static لأنها أصلا ثابتة

سيتم تحويل التوابع لنمط static ... الفكرة معقولة جدا

اقتباس
أسلوب التشفير الغريب الذي استعملته حتى تعرف كيف تقرأ التوابع التي تريد هي من الأشياء العجيبة في البرنامج

أسلوب الحصول على نمط Ascii الهدف منه هو استعماله ضمن JList لأنني لم أجد طريقة افضل من ذلك للتعامل مع JList

اقتباس
لتوابع كثيرة لأنك تنشئ تابعا جديدا للتحويل بين متر إلى سم ومن سم إلى متر!! أليست الأولى مقلوب الثاني؟ لماذا التكرار؟

معك حق (لكن حلجتي لحساب الAscii تمنعني من استعمال مثلا نمط هذا التابع string m_km(Boolean)

اقتباس
يفترض استخدام البرمجة الغرضية التوجه في تصميم مثل هذا البرنامج ولا سيما أن تضع الأشياء المشتركة في كل من Lengthو Count وغيرها!

هذا البرنامج كتب على عجل بواسطة Delphi و التي تعلم أنها من أكثر اللغات بعدا عن OOP لذلك اضطررت لاستعمال طريقة ميكروزفت الملعونة CCP (cut,copy,paste) و بعد تحويل الsyntax يجب تحويل الشيفرة بشكل كامل (بامكانك الاطلاع على شيفرة Delphi ضمن توقيعي)

اقتباس
إذا وجدت هذه الجمل يعني أني لن أستطيع استخدام حزمتك في إنشاء برنامج مبني على awt بدلا من swing

صحيح الأمر مزعج حقا و ذلك بسبب أنني لم أعرف كيفية ارجاع قيمة من أي mothod (في C++ أستعمل المعامل & لارجاع قيمة) لذلك اضطررت لاستعمال JButton و JTextField لآنهما يحتويان على التوابع set

للتذكرة : في C++ توجد ثلاثة طريق لاستخدام الواسائط ضمن التوابع او الطرق (Functions or methods) :

• التمرير بالقيمة passing by value

• التمرير بالمرجع passing by reference (يتم استعمال &)

• التمرير بالموشر passing by pointer

أكثر الطرق التي استعملها مع الكائنات هو التمرير بالمؤشر لأنها مرنة لحد بعيد جدا .... هذا أبرز شيء افتقدته في java .. انا متأكد أنه يوجد بديل لكن لا أزال طفل في عالم Java

اقتباس
لم يأخذ دمج الواجهة الجديدة مع المحرك أكثر من ربع ساعة

بالفعل هذا بسبب منطقك البرمجي الصحيح – على العكس من برنامجي الذي لم أخطط له على الاطلاق بل قمت بكتابته قبل امتحاني بساعة !!

اقتباس
برنامج المحول أسهل وأسرع بكثير من استخدام برنامج UnitStorm، وقد أشار أخي فهد لهذه النقطة المهمة جدا!

موضوع السهولة بسيط جدا ... حله بالواجهات GUI لن يستغرق أكثر من ربع ساعة لكنني مبتدأ و تهمني الشيفرة الآن

مدونتي

http://mbnoimi.net

#27

الاخ MMss

اقتباس
كما قلت أخي أبو مازن، فأنا لم أدقق كثيراً على الواجهات في البرنامج، وإنما على منطق البرنامج أو أسلوب عمله، وهذا غالباً ما يهمني وآخر ما أفكر في هو الواجهات. تعلمت هذا عندما بدأت بتعلم Java

على العكس يا أخي العزيز أنا أفضل عمل الواجهات و تجهيز الهياكل البرمجية (من تعاريف classes و functions ... الخ) ثم البدء بالبرمجة – لم أقول هذا عن فراغ بل عن تجربة عملية لمدة سنة و نصف و انا أعمل على تطوير برنامج هائل و الحمد لله بطريقة تخطيطي (و أخي أيضا) له نتج عمل ناجح .

اقتباس
دعنا مبدئياً من XML فأنا لا أعرف تماماً كيف أستطيع التعامل معها، ولكن دعنا أيضاً من قواعد البيانات، ودعنا نجرد الفكرة ونبسطها باستخدام ملفات نصية كما قال أخي أبو مازن

أنا أفضل بما ننا نشّرح المشروع جماعيا أن نوكل مهام فما رأيك أن تكون مهمتك هي الاطلاع على XML .. ابحث بهذا المجال و لن تخسر شيئا ، لأنني أرفض رفضا قاطعا التعامل مع الملفات النصية لأن طريقة التعامل هذه ناجحة للبرامج الصغيرة و فاشلة للبرامج الكبيرة ... و بما أننا نريد الأفضل ان شاء الله فعلينا بتعلم XML فالكثير من التطبيقات الناجحة تستعملها .... أنا استعملت XML لكن بواسطة Visual C++ .net طريقة التعامل معها سهلة جدا و حتى أسهل من الملفات و باستعمالها سترتاح كثيرا

اقتباس
الآن أنت كمبرمج لست مسؤول عن حساب التحويلات

هل تعلم أنني طالب هندسة ميكانيك هه هه هه هه درسنا البرمجة بالكلية بواسطة C++ لكن كلها كانت Low Level و ذلك من أجل مساعدتنا في التطبيقات الصناعية

مدونتي

http://mbnoimi.net

#28

الاخ فهد

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

هذا من دواعي سروري .. و أنا أدعوك أيضا أن تنخرط بعملية التشريح هذه .

اقتباس
لمستخدم النهائي يريد أن يرى النتائج بأقل الحركات الممكنة

هناك تعديل مهم سأجريه من أجل تحسبن ما ذكرت و هو أن جميع عناصر JList يجب أن تصبح بالنهاية قيما لتحويل و ليست سلاسل نصية عادية ... لكنني لن أضع هذه الميزة حتى أنهي تحويل الشيفرة لـ OOP

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

أنا من وجهة نظرك .. راجع ردي على الأخ MMss

مدونتي

http://mbnoimi.net

#29

تلخيص ما أود طرحه لترتيب عملية التطوير هو

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

2. بحث استعمال XML ، سيهتم به الأخ MMss ان وافق على ذلك

3. تهيئة الواجهة المرئية (أقصد GUI) ، سيهتم بها الأخ OMLX ... طبعا أيضا ان وافق

مدونتي

http://mbnoimi.net

#30

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

ستجد ذلك في الفئة ConverterFactory وبالأخص الفئة الداخلية التي نسيت اسمها!!

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

أما عن وجود طريقة لقلب العبارة الرياضية، فأنت تقصد حل العبارة الرياضية، فمثلا تريد من الحزمة أن تحلل العبارة الرياضية هذه:

متر = كيلومتر \1000

فتحول إلى:

كيلومتر = متر * 1000

أو تحول إلى

كيلومتر - متر * 1000 = صفر

أو تحول إلى:

كيلومتر \ 1000 - متر = صفر،

طبعا الحزمة لا تدعم حل المعادلات الرياضية مثلا:

س +4 = 8،

فلن تعطيك الحزمة قيمة س!

إمكانية تغيير مواقع المتغيرات في المعادلة قد يحتاج إلى إضافة محرك آخر يقوم بهذا!

مثلا:

Operation o1=reader.readOperation("x=y+100");
Operation o2 = FormulaAnalyzer.reverseDependentIndependentVariables(o1);

يقوم الأمر الأخير بتحليل العملية أو Operation ويقلبها لنا كما أشرت!!

ربما تصنع ذلك أنت، قد يكون الأمر بسيطا وقد يكون الأمر صعبا!! لا أدري حاليا!

لكن إذا كانت جميع المعادلات من نوع ( س = ص *\+- ثابت) فأعتقد أن الحل المرفق أو المحرك في برنامجي في الأعلى يقوم بهذا الأمر بسهولة شديدة! تفحص Formula و ConverterFactory و Converter! وبهذا حفظ وقراءة هذه التحاويل في ملف نصي سيكون سهلا بإذن الله! ولن تحتاج إلى قلب المعادلة!

بالمناسبة وجدت حزمة رياضية في الشبكة بسعر 120 دولار تقريبا،، وهي تدعم أشياء خيالية مثل حل المعادلات الرياضية وأشياء أخرى!

إليك الرابط: http://www.singularsys.com/jep/

#31

الأخ أبو مازن

لقد درست الشيفرة التي كتبتها بشكل جيد وهي بالفعل حلوة و OOP بدون منافس لكن لدي سؤال سألتك اياه لا يزال يحتاج لجواب

اقتباس
كيفية ارجاع قيمة من أي mothod (في C++ أستعمل المعامل & لارجاع قيمة) لذلك اضطررت لاستعمال JButton و JTextField لآنهما يحتويان على التوابع set

للتذكرة : في C++ توجد ثلاثة طريق لاستخدام الواسائط ضمن التوابع او الطرق (Functions or methods) :

• التمرير بالقيمة passing by value

• التمرير بالمرجع passing by reference (يتم استعمال &)

• التمرير بالموشر passing by pointer

مدونتي

http://mbnoimi.net

#32

المقصود بالارجاع ليس return بل الارجاع من الوسائط (الباراميترات)

مدونتي

http://mbnoimi.net

#33

نسيت أسألك .. كتاب Thinking in Java يتناول موضوع الـ Generic لأنها مهمة جدا بالنسبة لي هل أسلوب التعامل معها (من حيث الSyntax) مختلف عن C++ ؟؟؟؟ أم يشبهه لحد بعيد (كما لاحظت)

تم تعديل هذه المشاركة بواسطة C&DEL في 27 أكتوبر 2005 في 07:03

مدونتي

http://mbnoimi.net

#34

أخي C&DEL، ليس في Java وسائط بالقيمة ووسائط بالمرجع بحد علمي.

إنما الوسائط التي هي من نمط أولي Primitive Type هي دائماً بالقيمة.

أما الوسائط التي هي عبارة عن مؤشر على أغراض وهي كل الوسائط التي من أنماط غير أولية أو وسائط من نمط صف معين، فهي دائماً بالمرجع.

لذلك عند الحاجة إلى تمرير وسيط بالمرجع يجب أن نستخدم الصفوف المغلفة، فمثلاً بدلاً من استخدام النمط int نستخدم الصف المغلف Integer.

أما بالنسبة للأنماط الأولية وصفوفها المغلفة فهي كالتالي:

byte >>> Byte

short >>> Short

int >>> Integer

long >>> Long

float >>> Float

double >>> Double

char >>> Charcter

boolean >>> Boolean

#35

كل الأنماط التي ذكرتها ، وجدت الحل فيها بالفعل عن طريق التوابع setValue و getValue لكن الصنف String لا يحتوي على مثل هذا .. على حد علمي .... هذا من ناحية و من ناحية أخرى ماذا لو كان الصنف بالأساس لا يحتوي على تابع قياسي get أو حتى set

مدونتي

http://mbnoimi.net

#36

أخي C&DEL، بالنسبة لموضوع الـ XML فهو أمر يهمني جداً، وأنا بكل الأحوال على وشك دراسته.

وبالنسبة لموضوع الواجهات، فأنا عندي اقتراح، ولكني لا أستطيع شرحه الآن فهو بحاجة لأن أكمل فكرة معمارية ملفات الـ XML أولاً.

أخي أبو مازن، إن الدعم لقلب المعادلات في حزمتك أمر جيد جداً ولكن معادلات التحويل ليست دائماً بسهولة التحويل من متر إلى كيلومتر وعكسها. على كل الأحوال أعتقد أن كتابة معادلة التحويل المعاكسة في الملف بشكل مباشر أفضل ليكون أداء البرامج أسرع، ولو أدى هذا إلى تضخيم الملف. أليس كذلك؟!

#37

الصنف String هو صف، لذلك عندما يكون Parameter فهو بالمرجع دوماً، وهو لا يحتاج إلى توابع get و set للحصول على قيمته أو إسناد قيمة جديدة له. أما بقية الصفوف المغلفة فهي تملك طرق get للحصول على قيمتها محولة إلى نمط آخر.

مثلاً:

Integer i = new Integer(123);
double d = i.doubleValue();  //get the value by the primitive double type
Long l = i.getLong(); //get the value by the Long type

ولكنها لا تملك طرق set لتغيير قيمتها.

#38

بسم الله،،

لغة الجافا،، جميع الدوال تعمل بطريقة النقل بالقيمة أو pass by value سواء كانت مرجعيات أو قيم بدائية،

النقل بالقيمة أو pass by value تعني نسخ القيمة المسجلة في المتغير في متغير آخر،، مثلا

int x=10; 
int y = x; // passing by Value, x and y are both 10 now.
y=5;// y is 5 and x is still 10

Rectange r = new Rectange();
 Rectange r2 = r; // passing by value, r and r2 both have the same refference value which is like an address, 
// of course , the address is the same , the address points to the same object.

قيمة المتغير البدائي مثل int هي الرقم نفسه،، ولهذا تنتقل المتغيرات بالقيمة،، ولا ننقل المتغير نفسه، بل ننقل قيمة المتغير،

قيمة المتغير الشيئي مثل Rectangle هي العنوان نفسه (وليس الشيء المشار إليه) ولهذا ننقل المتغيرات بالقيمة وهي العنوان، ولا ننقل (الشيء)

طبعا للسهولة، قد يسمي البعض أن الثاني عبارة عن pass by refference أو النقل بالمرجع، لكن هذا هذا ليس صحيحا،،

طبعا pass by value هي المفضلة دائما في الاستخدام وتعتبر pass by refference غير جيدة وخاصة أنها مضرة في الاستخدام! وتصعب فهم الشفرة،، وأشياء أخرى قد تغيب عني.

حسب علمي: pass by refference أو النقل بالمرجع موجودة في عائلة .Net و VB و QBasic ، ولا أعرف عن اللغات الأخرى!

--------------------

إذا أردت أن تستعمل String لتعبئتها في دالة، فاستخدم StringBuilder

public void getTheNameTelephoneAndAddress(StringBuilder name, StringBuilder phone, StringBuilder address){
name.append("Hussam");
phone.append("my Number");
address.append("my www address");
}

ربما تعجبك هذه الشفرة،، لكن هذا ليس تصميما لذيذا،، من الأفضل أن نصنع هذا مثلا:

class PersonData{
String name, phone, address;
PersonData(String n, String p, String add){
name=n;
phone=p;
address=add;
}
public void setName(String n){
name=n;
}
public String getName(){
return name;
}
///more get set methods.
}
///// in your program:

public PersonData getPersonData(int id){
PersonData person= null;
person = findInDataBase(id);// get the person
return person;
}

----------------------------------------

لا أدري عن آخر إصدار هذا الكتاب، لكن Generics كما يقال مثل Templates في سي ++، لكنها مختلفة كثيرا في نفس الوقت،

ملاحظة، أستطيع تجنب استخدامها وخاصة أن الكثير لا يعرفها جيدا،، كما أني لا أتقنها أيضا حاليا!!

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

أضف إلى ذلك، أن تعلم Generics أو كما أسميها (الجنسيات) قد لا يكون مفيدا إذا المبرمج لم يستخدم الشيئية التوجه جيدا،،

قبل أن نتعلم الجنسيات،، أفضل أن نتعلم كيفية استخدام الحزمة java.util مثلا،، هذه الحزمة لا أراها تستخدم في بعض البرامج الموجودة في المنتدى، وهو أمر غريب،، لأن عدم استخدام هذه التقنيات تعني أنك لم تستخدم قوة الجافا!

حزم Collections أو المجموعات موجودة في java.util! وأشياء أخرى مفيدة داخل الحزمة الأساسية هذه!

-----------------------------

String و Integerو Long و Double وغيرها ، هي Immutable classes أو أشياء لا تتغير قيمتها!! يعني ليس فيها أمر set!!

وهي تعتبر wrapper أو مغلف للقيم الأولية double , int وغيرها!

ولن تحتاج إليها عادة!!

بالتوفيق!!

#39

الأخ MMsss

اقتباس
أخي C&DEL، بالنسبة لموضوع الـ XML فهو أمر يهمني جداً، وأنا بكل الأحوال على وشك دراسته

اذا من حيث المبدأ وافقت على دراسة XML لتضمينها ضمن المشروع

الأخ أبو مازن

بشأن التمرير بالمرجع .. مشور لقد فهمت النقطة ... بالفعل هذا الأمر يختلف اختلافا جذريا عن C++

اقتباس
أضف إلى ذلك، أن تعلم Generics أو كما أسميها (الجنسيات) قد لا يكون مفيدا إذا المبرمج لم يستخدم الشيئية التوجه جيدا

بالنسبة لي عندما كنت أستعمل C++ من المستحيل الاستغناء عن الGeneric فهي أساس البرمجة الكائنية !!! لذلك فأنا مضطر للبحث عن مرجع يعلمني اياها بالجافا و بأسرع وقت ممكن ... هل بامكانك مساعدتي بهذا الاتجاه :rolleyes: :rolleyes:

اقتباس
أفضل أن نتعلم كيفية استخدام الحزمة java.util مثلا،، هذه الحزمة لا أراها تستخدم في بعض البرامج الموجودة في المنتدى

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

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

مدونتي

http://mbnoimi.net

هذا الموضوع مغلق.

مواضيع مشابهة