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

لماذا لانفتح موضوع عن جودة كتابة الكود

مغلق
بدأه فواز الشمري في 12 أغسطس 2005 · 46 رد · 3,471 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بعد التحية

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

فهل توافقون على فتح هذا النقاش نضرا لأهمية .

(h)

#3

أعتقد طريقة كتابة اللغة العربية سيكون موضوعا مشوقا أكثر:

أصلحت الأخطاء...

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

فهل توافقون على فتح هذا النقاش نظرا لأهميته؟

:) لا تزعل، أمزح معك!

#4

فعلاً أخي فواز الشمري موضوع مهم جداُ لاننا حتي الان نقوم بكتابة الكود التقليدي ولم نستفيد بما فيه الكفاية من الميزة الجديدة الموجودة في الـ VB.NET وهي أن الـ VB.NET هو Object Oriented Programming ونحن أحياناُ كثيرة نقوم بتكرار نفس الكود (أقصد هنا مايقوم به الكود) في أكثر من نموذج واحد في نفس المشروع أو في أكثر من مشروع ! لماذا لا نتجه في كتابة الكود الي الاستفادة من الوراثة والتي تعتبر من أهم مايميز الـ OOP .

هل سألت نفسك يوماً لماذا لا تكون لي مكتبتي الخاصة (مكتبة شفرات) ؟؟

أعتقد أنه يجب علينا تصنف الشفرات الي فئات مثلاً شفرات الوصول لقاعدة البيانات , شفرات التعامل مع قواعد البيانات (هذا علي سبيل المثال) وذلك لكي يكون النقاش محدد ومفيد .

والله الموفق .

#5

يبدو ان الموضوع يكون جيد للمناقشة :

اخي hazzoom سوف اضع بعض الأمثلة ولكن أتمنا ان تشاركوا معي ايضاً :

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

كما ذكرالأخ Ammar Gaffar ان oop تعتبر مهمة جدا وهذا موضوع سيكون من ضمن النقاشات إن شاء الله ....

#6

السلام عليكم

فعلا موضوع يستحق المتابعة

واود لو واحد ينصحنا مالفرق بين

Structure

Class

ايهما اسرع؟

وماخصائص كل منهما؟

وإن شاء الله ستكون لنا مشاركات جيدة بهذا الصدد

#7

أوافقك الرأي أخي فواز

ولكن لاتنسى أن ذلك يعود إلى خبرة المبرمج

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

وأيضا عامل المنطقية في العمل ( ماذا تريد أن تصنع ؟)

من المفترض أن يقوم الشخص بترتيب الفكرة في ذهنه أو على ورق أولاً

ثم يقوم بتنفيذها (البرنامج التطبيقي) ..

ونرجع ونقول عامل الخبرة مهم ! !

مثلا فلان يكتب الكود في عشرة أسطر وغيره في سطرين مع أن الهدف واحد !!!!

وجهة نظر :rolleyes:

#8
اقتباس
ونرجع ونقول عامل الخبرة مهم ! !

مثلا فلان يكتب الكود في عشرة أسطر وغيره في سطرين مع أن الهدف واحد !!!!

معك كل الحق في هذه النقطة , ولكن مشكلتنا أننا في معظم الأحيان نقفز مباشرة الي كتابة الشفرة وهذا في إعتقادي هو أكبر خطا يقع فيه المبرمج , وعامل الخبرة مؤثر جداً ولكن يمكننا تقليل تأثيره بالبداية الصحيحة .

وهنالك عامل آخر أهم من الخبرة وهو طبيعة البرنامج احياناً يضطر المبرمج الي إتباع أسلوب في نظر معظم المبرمجين خاطئ وهو يعرف ذلك جيداً ومع ذلك يقوم باتباعه وذلك لأنه يقوم بما يريده البرنامج علي أكمل وجه .

علي سبيل المثال : المعروف جيداً لمستخدمي ومبرمجي الـ SQL Server أن استخدام الـ Cursors بطئ نسبياُ , ولكن الـ Cursors في بعض الأحيان مفيدة أكثر بكثير من بطئها .

وعامل طبيعة البرنامج أيضاً يمكن حصره ..

والله الموفق

#9

موضوع يستحق التثبيت فارجو ممن لديه اي خلفيه عن هذا الموضوع ان لايتردد في طرحها لكي تعم الفائده ,

انا حاليا افتقد لمثل هذه الامور في البرمجه كترتيب الكود

اعيد واكرر من لديه اي شيئ حول هذا الموضوع ان يفيدنا فيه

ودمتم سالمين -waf

#10

أعتقد أن هناك أمر هامة في هذا الموضوع

أولا - يجب أن يكون الكود بأقل عدد أوامر ممكنة وينفذ الهدف منه بسرعة

ثانيا - يجب البحث عن الكود الأسرع في التنفيذ والأسهل في الفهم

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

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

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

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#11

-09

اخي samerselo ,

كلامك جميل ولكن بالنسبه لعمل مكتبه للاكواد من اين ابدا وكيف مثلا على اي اساس سوف يتم ترتيب هذه المكتبه

ارجو الافاده وشكرا

#12

اخوتي الاعزاء

اذا اردتم فعلا صنع ادوات عربية حقيقية

فلتبدأ سويا بذلك ونتمنى ان تكون الادوات base

وليطرح احد منكم فكرة

ولكن يجب ان نكوّن فريقا اولا ثم ننتخب مشرفا بالتصويت

ويقوم المشرف بتوزيع الادوار حيث تمرر الاداة او مجموعة الادوات الى كل واحد من الفريق

يقوم بتطوير مايجده مناسبا

ثم عند الانتهاء حيث تكون الادوات جاهزة نصوّت لتأكيد او حذف ماتم عمله من خصائص واحداث

#13

السلام عليكم

موضوع جميل جدا وفعلا بحاجة الى نقاش

بالنسبة للفرق بين الـclass والـstruct هذا توضيح بسيط

لفئة Class تختلف عن struct من عدة نواحي هذه اهمها:

1- النوع Type :

الفئة Class من نوع Reference Type والـ Struct من نوع Value Type وهذا هو الاختلاف الرئيسي والاهم بين الاثنين... والاختلاف هذا يعني ان الفئة من نوع مرجعي يعني ان المتغيرات عبارة عن مؤشر ولاتحتوى على القيمة بشكل مباشر، وهي تنشأ في الذاكرة في Heap، اما Struct فهو قيمة Value Type اي ان المتغيرات تحتوى على قيمتها الحقيقة بدون مؤشرات. وهي تنشا في الذاكرة في الـ Stack. وهذه ميزة، حيث ان استخدامك للـ Struct يفيدك في الكائنات التي تحتاج الى سرعة اي كانك تتعامل مع الانواع الرئيسية للغة مثل Int او String.

2- الوراثة Inheritance

كل كائنات struct تكون مشتقة من الفئة الاساسية System.ValueType، كما انه لايمكن وراثة الـ struct، كما انه لايمكن توريث الـ struct من اي فئة اخرى، يمكنك فقط توريث الواجهات Interfaces، كما ان الـ struct دائما يكون غير قابل للاشتقاق كما ذكرت لذلك لايمكن استخدام الكلمات المحجوزة sealed او abstract معها. وايضا، بما ان struct غير قابل للاشتقاق لايمكن استخدام الكلمات المحجوزة protected ولا protected internal لاعضاء strcut، كما لايمكن استخدام الكلمات المحجوزة virtual ولا override على اعضاء الـ struct، فقط يمكن استخدامها مع الاعضاء من الفئة الاساسية System.ValueType.

طبعا كل ماسبق عكس مايحدث في الفئات Classes حيث انه يمكن اشتقاقها، ويمكنك وراثة اي فئة اخرى لتكون الفئة الاساسية base class. ويمكنك تحديد ماتشاء من المعرفات على الاعضاء.

3- اسناد القيم

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

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#14

الله ينور عليك يا عم سولو بس لو تتكرم وتقول ما هو ال Heap ؟؟؟

أنا عارف ال Stack لكن ما هو ال Heap الله أعلم ؟؟؟

#15

بسم الله الرحمن الرحيم

Heap

هو منطقة في الذاكرة يتم حفظ مؤشرات الي العناوين التي تحوي القيم الحقيقية الموجودة في Stack

يعني ببساطة الHeap يحفظ بها عناوين القيم الموجودة في Stack

مثال

Integer a=100

اين توضع 100؟؟؟

في Stack

واين يوضع اسم المتغير a???

ايضا في Stack

ولكن اين يوضع عنوان a في الذاكرة ؟

في Heap

ارجو ان اكون وفقت في ايصال المعلومة

و ان حدث خطا ارجو التوضيح

سلام

حكمتي الدائمة.....................................................

ان ما عند الله لا يطلب الا بطاعته

.....................................................................

?who is Ingm

Name: Hasan Adel Hasan

Education: BCs in IS from Faculty of computers & information systems

Mansoura University- 2003

E-mail: hsn_3004@yahoo.com

#16

بعد اذنكو يا جماعة

انا شايف ان الموضوع كان ماشي في اتجاه و اخذناه نحن في اتجاه اخر تماما

الافضل ان نتحدث عن اساليب رفع كفاءة الكود

Code Optimization

واساليب رفع كفاءة البرنامج بشكل عام

Performance Optimization Techniques

ما رايكم ؟

سلام

تم تعديل هذه المشاركة بواسطة Ingm في 14 أغسطس 2005 في 06:34

حكمتي الدائمة.....................................................

ان ما عند الله لا يطلب الا بطاعته

.....................................................................

?who is Ingm

Name: Hasan Adel Hasan

Education: BCs in IS from Faculty of computers & information systems

Mansoura University- 2003

E-mail: hsn_3004@yahoo.com

#17
اقتباس
ارجو ان اكون وفقت في ايصال المعلومة

الحمد لله وصلت بسهوله , وشكرا جزيلا ,,,

اقتباس
الافضل ان نتحدث عن اساليب رفع كفاءة الكود

Code Optimization

واساليب رفع كفاءة البرنامج بشكل عام

Performance Optimization Techniques

بس ده مش هينفع بالشكل المضبوط طالما أساسيات ال OOP ضايعه من عندنا لأن أغلب أعضاء VB.NET كانوا في VB 6.0 (وأنا أول واحد) ولم نتعود علي أسلوب ال OOP فأنا أقترح ان يضع أحد كتاب في ال OOP من خلال ال VB.NET ونتناقش فيه( من حيث تحسين أسلوب كتابة الكود) ,

صحيح الطريقه دي هتخلينا نبعد شويه عن المطلوب لكن في النهايه هنوصل الي الهدف بطريقه علميه ,,

#18

بسم الله الرحمن الرحيم

اولا

احمد الله تعالي اني لم استمر كثيرا مع vb6 و الا كنت عمري ما هافهم يعني ايه OOP

:lol: :lol: :lol:

عموما انا ملاحظ فعلا اني مشكلة مبرمجي VB.NET انهم بيفكروا بعقلية مبرمجي VB6

<_< <_<

يا جماعة انسوا VB6 تماما و ارموه خلف ظهوركم طالما تريدون ان تتعلموا لغات محترمة (مثل VB.NET OR C# OR JAVA)

اما بخصوص كتاب عن OOP فانا عندي كتاب اسمة

OOP in dot net framework

بس مش فاكر هوه فين دلوقتي :lol:

سلام

حكمتي الدائمة.....................................................

ان ما عند الله لا يطلب الا بطاعته

.....................................................................

?who is Ingm

Name: Hasan Adel Hasan

Education: BCs in IS from Faculty of computers & information systems

Mansoura University- 2003

E-mail: hsn_3004@yahoo.com

#20

اخيرا وجدته

وهو باسم

MS Press - OOP with Microsoft VB.NET and C# Step By Step.pdf

الي عايز الكتاب ده يبعتلي رسالة لان حجمه 2.35 ميجا

بريدي هو

hsn_3004@yahoo.com

سلام

تم تعديل هذه المشاركة بواسطة Ingm في 14 أغسطس 2005 في 08:38

حكمتي الدائمة.....................................................

ان ما عند الله لا يطلب الا بطاعته

.....................................................................

?who is Ingm

Name: Hasan Adel Hasan

Education: BCs in IS from Faculty of computers & information systems

Mansoura University- 2003

E-mail: hsn_3004@yahoo.com

#21
اقتباس
بعد اذنكو يا جماعة :angry:

انا شايف ان الموضوع كان ماشي في اتجاه و اخذناه نحن في اتجاه اخر تماما

كلام ingm مزبوط

الموضوع خرج عن مساره كليا

#22

السلام عليكم ورحمة الله ...

ساقوم هنا بشرح دالة أستخدمها في جميع برامجي مع ملاحظة أنني ساشرحها لتوضيح النقاط التالية :

كيفية تطبيق الوراثة علي البرنامج.

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

كيفية بناء Library وكيفية إستخدامها

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

الدالة هي تقوم بالتحقق من إدخالات المستخدم للحقول المطلوبة في الكائنين : TextBox AND ComboBox

أولاً قم بفتح مشروع جديد من نوع ClassLibrary وقم بتسميته MyValidation

سيتم إنشاء Class1 تلقائياً (من الأفضل أن نقوم بتسمية فئة تدل علي محتواها)

قم بأنشاء Class جديد وتسميته ValidationClass

قم باضافة المرجع System.Windows.Forms.dll وذلك عن طريق الضغط بالزر الأيمن علي Reference واختيار Add Reference

قم بالاعلان عن المرجع System.Windows.Forms.dll في بداية الـ Class باستخدام الشفرة التالية :

Imports System.Windows.Forms

داخل الـ Validation Class قم بكتابة الشفرة التالية :

'Validate Controls 

    Public Function IsValidated(ByVal mybox As Control, ByVal ErrProvider As ErrorProvider, Optional ByVal TagName As String = "Required") As Boolean
        Dim Ctrl As Control
        Dim IsValid As Boolean = True
        'Validate Text Boxes
        For Each Ctrl In mybox.Controls
            If Ctrl.Tag = TagName Then
                If TypeOf Ctrl Is TextBox And Ctrl.Text = String.Empty Then
                    ErrProvider.SetError(Ctrl, "Required Field!")
                    IsValid = False
                Else
                    ErrProvider.SetError(Ctrl, "")
                End If
                'Validate Combo Boxes
                If TypeOf Ctrl Is ComboBox Then
                    If Ctrl.Visible = True Then
                        If CType(Ctrl, ComboBox).SelectedIndex() <= -1 Then
                            ErrProvider.SetError(Ctrl, "Invalid Selection!")
                            IsValid = False
                        Else
                            ErrProvider.SetError(Ctrl, "")
                        End If
                    End If
                End If
            End If
        Next
        Return IsValid
    End Function

قم بحفظ المشروع وعمل Build .

فيما يلي وصف مختصر لمعاملات الدالة :

MyBox : يمثل الكائن الذي يحتوي علي الـ Controls التي تريد عمل Validate لها ويفضل دائماً في واجهات الاستخدام استخدام GroupBox .

ErrProvider : كائن الـ Error Provider الذي يجب وضعه في النموذج لتحديد الحقول المطلوبة ولم يتم الإدخال فيها

TagName : وهو أختياري وهنا أستخدمه لمرونة التحكم في الكائنات التي أريد التحقق منها

الان لعمل إختبار للمكتبة السابقة قم باضافة مشروع جديد للمشروع الحالي وقم بتسميته TestValidation وهو Windows Application عادي

أولاً يجب إضافة المكتبة MyValidation.dll والمعمولة سابقاً الي التطبيق وذلك بالضغط بالزر الايمن علي Reference ثم Add Reference ثم Browse وقم باضافة المكتبة والتي تكون موجودة داخل المجلد bin الخاص بالمشروع MyValidation

قم باضافة GroupBox للنموذج.

قم باضافة ثلاثة مربعي نص للنموذج TextBoxes ومربعي سرد Combo Boxes داخل الـ GroupBox .

قم باضافة Error Provider للنموذج وقم بتسميته ErrProvider

في الخاصية Tag للكائنين TextBoxes والكائنين ComboBox أكتب Required

قم باضافة زر وأكتب فية الشفرة التالية :

Dim Obj As New MyValidation.ValidationClass
        If Obj.IsValidated(GroupBox1, ErrProvider) Then
            MsgBox("Validate Complete")
        End If

قم بعمل Run للمشروع وعند الضغط علي الزر بدون كتابة أي شئ في الحقول المطلوبة يظهر الـ Error Provider

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

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

الملف المرفق يحتوي علي المثالين السابقين .

والله الموفق.

Test Library.zip

#23

بارك الله فيك ومشكور وما قصرت :rolleyes:

#24
abumarie2003 كتب:
-09

اخي samerselo ,

كلامك جميل ولكن بالنسبه لعمل مكتبه للاكواد من اين ابدا وكيف مثلا على اي اساس سوف يتم ترتيب هذه المكتبه

ارجو الافاده وشكرا

أولا - يجب تحديد مكتبتين 1 - التحكمات التي نطورها بأنفسنا نجمعها في مكتبة واحدة للتحكمات

2 - الأكواد التي نستفيد منها في البرامج المختلفة نجمعها في مكتبة للأكواد

وفتح موضوع خاص لكل مكتبة

ثانيا - تحديد فريق عمل من الإخوة الأعضاء الذين يودون الاشتراك في المكتبات وتقسيمه إلى فريقين فريق لكل مكتبة

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

رابعا - يقوم شخص متفق عليه في كل موضوع بتجميع هذه الأكواد في مكتبة حسب النوع المتفق عليه وطرح نسخة جاهزة ونسخة سورس ليستفيد منها الجميع

هذا تصوري لطريقة عمل المكتبة التي أقترحها

وأنتظر رؤية هل أحد لديه تصور أفضل

وطبعا موافقة الجميع على تنفيذ الفكرة

تم تعديل هذه المشاركة بواسطة samerselo في 14 أغسطس 2005 في 16:24

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#25
اقتباس
أولا - يجب تحديد مكتبتين 1 - التحكمات التي نطورها بأنفسنا نجمعها في مكتبة واحدة للتحكمات

2 - الأكواد التي نستفيد منها في البرامج المختلفة نجمعها في مكتبة للأكواد

وفتح موضوع خاص لكل مكتبة

ثانيا - تحديد فريق عمل من الإخوة الأعضاء الذين يودون الاشتراك في المكتبات وتقسيمه إلى فريقين فريق لكل مكتبة

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

رابعا - يقوم شخص متفق عليه في كل موضوع بتجميع هذه الأكواد في مكتبة حسب النوع المتفق عليه وطرح نسخة جاهزة ونسخة سورس ليستفيد منها الجميع

إقتراح جميل وعملي فعلاً ,, أوافق الأخ samerselo علي إقتراحه الجميل

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…