RSS

Tag Archives: software

Java Programming: Let's master (8/i)

Java Programming: Let's master (8/i)

Chapter 8 – Strings & Text I-O

8.1. Introduction

النهاردة معادنا في شابتر سهل أول وممتع ومهم،، هنتكلم فيه عن كل ما يخص الـ Strings والـCharacters  وهنغطي كمان جزء الـ Text I/O أو ما يسمى بقراءة وإدخال النصوص إن صحّت الترجمة، حيث لا أميل لترجمة المصطلحات دي بالعربية.. المهم

في البداية طبعا عاوزين نعرف يعني ايه string ؟؟

هو عبارة عن تسلسل من الحروف. في معظم لغات البرمجة بيعامل الـ string معاملة الarray of chars ولكن في الجافا بنعامل الـ string معاملة ال object . فيه عندنا تلات كلاسات بيتعاملوا مع الـ string وهما :

String, StringBuilder, and StringBuffer

لو التعامل هيبقي فقط لتخزين والتعامل مع الـ string في الحالة دي كلاس الـ String اختيار موفق ولكنه مش بيسمح بالتعديل علي الـ string . في حالة استخدامنا للكلاسين التانيين StringBuilder & StringBuffer نقدر نعمل strings ونقدر نعدلهم والتعامل هيبقي مرن .

8.2. The String Class

كلاس java.lang.String بيكون string من تسلسل مجموعة من الحروف. احنا اتعاملنا قبل كده مع المتغير اللي من نوع String زي مثلا ميثود println(String s) والـ compiler بياخد الـ string variable وبيقوم محوله لـ string object وبيتعامل معاه علي الأساس ده.

كلاس الـ String بيحتوي علي 11 constructor واكتر من اربعين ميثود بيعملوا وظائف متعددة زي مقارنة محتويات الـ strings والبحث عن string معين داخل string ووالتعامل مع الناتج الجديد وتحويل الحروف من حالة ال capital لحالة الـ small او من الـ uppercase للـ lowercase .

8.2.1. Constructing a String

طيب ازاي اعمل   String object؟

عندنا اربع طرق كلهم بيعملوا string جديد

1-    اول طريقة هتعامل مع الـ string علي انه object وبخلقه زي اي object :

2-    تاني طريقة اني اديله الـ stringLiteral علطول :

3-    تالت طريقة اني اعامل الـ string عادي كأنه متغير عادي (ودي الطريقة الشائعة):

4-    اخر طريقة اني اعرفه علي انه array زي كده

ملحوظة ::

فيه فرق بين String variable , String object , String value ولكن لأن الفروق بسيطة جدا فحاليا هنتعامل معاهم علي انهم واحد ونتجاهل الفروق دي مؤقتا وهنستخدم كلمة string بدل منهم.

8.2.2. Immutable Strings and Interned Strings

كلمة immutable string معناها انه لا يمكن تغييره او تعديله مثلا لو كتبنا الكود ده ياتري قيمة الString هتتغير؟؟

الإجابة هي لأ القيمة مش هتتغير. الجملة الأولي هتخلق String object وتحط فيه قيمة “java” وتدي الـ Reference بتاعه للمتغير s وفي الجملة التانية هييجي يحط القيمة الجديدة في نفس المتغير مش هينفع زي مااحنا شايفين:

لأن الـ String قيمته مش بتتغير الجافا بتوفر طريقة لتوفير استهلاك الـ memory  عن طريق استخدام ميثود اسمها intern() زي كده :

النتيجة هتبقي كده:

هنلاقي ان s, s2, s3 كلهم عبارة عن interned string فكلهم ساووا بعض لكن s1 لما قارناها بـ s طلعت مش بتساويها لأنهم اتنين objects مختلفين مع انهم بيحملوا نفس القيمة.

8.2.3. String Comparisons

احيانا بنحتاج نقارن قيمة اتنين string ببعض بإستخدام (==) :

ولكن الطريق دي بتشوف هل string1 و string2 بيشاوروا علي نفس الـ object ولا لأ. علشان نقارن بين القيم اللي بداخل string1 و string2 بنستخدم ميثود اسمها equals زي كده

ملحوظة::

مش معني ان اتنين strings بيحملوا نفس القيمة انهم يبقوا بيشوروا علي نفس الـ object ممكن يبقوا بيحملوا نفس القيمة ولكن كل واحد بيحمل reference لـ object مختلف عن التاني زي كده

في اول جملة هيبقي الناتج false لأنهم بيحملوا reference لأتنين object مختلفين ولكن في الجملة التانية هترجع true لأنهم بيحملوا فعلا نفس القيمة وهي “Welcome to Java” .

فيه برده ميثود اسمها compareTo ودي بتقارن بين اتنين string وبتبقي زي كده :

الميثود دي بترجع 0 لو s1 بيساوي s2 وبترجع قيمة اقل من 0 لو s1 اقل من s2 وبترجع قيمة اكبر من 0 لو s1 اكبر من s2  .

ونلاحظ برده ان نتيجة المقارنة بتعتمد علي ترتيب الحروف الأبجدي نفسه يعني بفرض ان عندنا s1 فيه “abc” وعندنا s2 فيه “abg” نتيجة المقارنة هتبقي -4 . هنيجي نقارن اول حرف من s1 واول حرف من s2 اللي هو “a” هيطلع متساويين فيه وبالمثل في التاني ولكن في الحرف التالت هنلاحظ  ان في ترتيب الحروف ال”c” بتقل عن ال”g” بـ 4 حروف فالنتيجة هتطلع -4 .

تنبيه:: يرجي عدم استخدام علامات المقارنة العادية (<,>,<=,>=) في حالة الـ String ولكن يتم استخدام ميثود compareTo فقط.

برده فيه ميثودس كتير ممكن نحتاجها زي equalsIgnoreCase بتقارن ولكن بتتجاهل حالة الحروف من حيث انهم uppercase او lowercase وميثود regionMatches بتقارن جزء فقط من الـ string وليس الstring كله وفيه برده ميثود str.startsWith(prefix) بتختبر هل الـ string ده بيبتدي بالقيمة الفلانية ولا لأ وميثود str.endsWith(suffix) بتختبر هل الـ string ده بينتهي بالقيمة الفلانية ولا لأ.

8.2.4. String Length and Retrieving Individual Characters

من الممكن معرفة طول الـ string عن طريق استخدام ميثود length() زي message.length() ودي بترجع طول الـ string .

ميثود تانية s.charAt(index) بترجع حرف معين من الـ String والـ index بيكون رقم بين الـ 0 وبين s.length() – 1 يعني message.charAt(0) هترجع “w” زي كده :

تنبيه :: لازم نراعي ان الـ index بيبقي اقصي قيمة ليه هي s.length()-1 وده لأن الـ index في حالة الـ string بيبدأ من 0 ومش من 1ولو كتبناها s.length() بس هيطلع StringIndexOutOfBoundsException  .

ملحوظة :: ميثود length موجودة اصلا في الـ array  وبنستخدمها هنا لنفس السبب ولكن هنا بنقول s.length()  وبترجع عدد الحروف في الـ string وفي حالة الـ array بنقول a.length وبترجع عدد العناصر في الـ array.

8.2.5. String Concatenation

ممكن نستخدم ميثود concat لدمج اتنين string زي كده:

وممكن برده الطريقة دي:

String myString = message + ” and ” + “HTML” ;

ونقدر نستخدم + لنفس الغرض لدمج اكتر من string مع بعض والأرقام كمان وفي حالة الأرقام بيتحول الرقم لـ string وبعد كده يندمج مع الـ string الأصلي ولازم نراعي ان في المعادلة دي لازم اي طرف يكون نوعه string وإلا الدمج مش هيتم.

8.2.6. Obtaining Substrings

احنا استخدمنا ميثود charAt() لإسترجاع حرف من string ولكن لو عاوزين نرجع اكتر من حرف بنستخدم ميثود substring وبيبقي ليها شكلين :

–         public String substring(int beginIndex, int endIndex

بترجع string جديد عبارة عن جزء مقتطع من الـ string الأصلي وبحددله بداية التقطيع beginIndex ونهايته endIndex زي المثال ده :

–         التقطيع والنهاية بتبقي لنهاية الـ string زي كده :


 

والنتيجة هتكون كده:    “Welcome to HTML”

8.2.7. String Conversions

صحيح ان بمجرد عمل الـ string مش بقدر اعدل في قيمته لكن اقدر اعمل string جديد بإستخدام toLowerCase, toUpperCase, trim, and replace كلهم بيرجعوا String جديد  :

–         toLowerCase, toUpperCase بيرجعوا String جديد بتتبدل فيه حروف الأصلي سواء من الupper لل lower او العكس.

–         trim بتشيل اي مساحات بين الحروف .

–         replace بتبدل اي حرف في كل مرة وجوده بحرف تاني

8.2.8. Finding a Character or a Substring in a String

ممكن نستخدم ميثودس زي indexOf  و  lastIndexOfللبحث عن حرف او مجموعة حروف بداخل اي string .فيه عندنا اربع صور لميثود indexOf() وميثود lastIndexOf():

بترجع الـ index بتاع الحرف ch لو ظهر مرة واحدة بس والindex بتاع اخر ظهور للحرف في حالة تكراره وبترجع -1 في حالة عدم وجود الحرف نهائي وبنستخدمها كده مثلا indexOf(‘a’) .

بترجع الـ index بتاع الحرف من اول الـ fromIndex

بترجع الـ index بتاع اول حرف في str في حالة وجوده مرة واحدة فقط واخر index لأول حرف في حالة تكرار الstr كله وبيرجع -1 في حالة عدم وجود Str
/p>

بترجع الـ index بتاع اول حرف في str من اول fromIndex .

امثلة :

8.2.9. Conversion Between Strings and Arrays

الـ string  مش array ولكن ممكن احوله لـ array والعكس صحيح. علشان احول من String لـ array بنستخدم ميثود toCharArray زي كده :

هيبقي عندنا chars[0]=”J” , chars[1]=”a”, chars[2]=”v”, chars[3]=”a”

لو عاوزين نحول من array لـ string هنستخدم الـ constructor ده String(char[]) :

أو

8.2.10. Converting Characters and Numeric Values to Strings

علشان نقدر نحول اي قيمة عددية لـ string بنستخدم الميثود المناسبة لنوع القيمة العددية يعني مثلا Double.parseDouble(str) بنستخدمها في حالة المتغير اللي من نوع Double وميثود Integer.parseInt(str) في حالة المتغير اللي من نوع int .

8.2.11. Example: Checking Palindromes

مثال عندنا ده برنامج بيختبر اي string هل هو palindrome ولا لأ؟

الـ string بيكون palindrome لو اتقري من اليمين زي الشمال زي مثلا “mom” او “dad” او “noon”

لو جينا نفكر في فكرة للبرنامج اول حاجة عمل متغيرين low و high عبارة عن index اول واخر حرف في الـ string ومبدئيا low قيمته 0 والـ high قيمته s.length()-1 وبيقارن الـ low مع الـ high لو هما نفس الحرف بيزود الـ low بواحد ويقلل الـ high بواحد ويقارنهم تاني وهكذا لحد اخر الString وبنطلع من اللووب لو الـlow بقي اكبر من الـ high او في حالة ان الحرفين مختلفين.

احنا لحد هنا نكون اتعرفنا على كلاس String و StringBuilder وعرفنا أهم عمليات المعالجة اللي ممكن تتم على String أو charArray

في النهاية عايز أوضح ان الجافا بتتعامل مع الString على انه أوبجكت وبتعتبره reference dataType ..

ومعادنا المرة الجاية ان شاء الله نتكلم عن كلاس Character والجزء الخاص بـ Text I/O..

It’s totally free to share

Thanks, CATReloaded

Thanks, CATaZine

Om4rezz

 
Leave a comment

Posted by on March 26, 2012 in Featured, Programming, Software

 

Tags: , , ,

Java Programming: let's master (7) : OOP

Java Programming: let's master (7) : OOP

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

احنا في الجزء ده هنتكلم علي حاجات كانت مبهمة قبل كده زي يعني ايه  class , object؟  ، وهنتعرف علي معناهم وكل حاجة تخصهم بإذن الله..

7.2. Defining Classes for Objects

واول تعريف لينا هو يعني ايه object ؟ ، بيقول لينا ان الـ object عبارة عن شيء موجود في البيئة المحيطة بيه ، يعني لو قولنا امثلة هنقول الدايرة او ال button او حتي القرض ممكن نعتبرهم  objects ، اي object لو جينا نعرف مكوناته هنلاقيه بيتكون من :

1- ال state ودي بتوصف ال object وبيقوم بالمهمة دي ال data fields او المتغيرات العادية بقيمهم الحالية

2- ال behavior وهو سلوك الobject ده يعني بيعمل ايه وبيقوم بالمهمة دي مجموعة من ال methods .

ومعني اني بستدعي ميثود من object ده معناه اني عاوز الobject ده يقوم بوظيفة معينة.

مثال : الobject بتاع الدايرة فيه متغير اسمه radius وده بيوصف الدايرة وممكن ال behavior يكون حساب مساحة الدايرة دي عن طريق استدعاء الميثود اللي اسمها ()getArea

نيجي لتعريف تاني وهو يعني ايه class ؟ ، بيقول ان الكلاس ببساطة عبارة عن وعاء لل objects اللي من نفس النوع ، “وعاء” بمعني اني بعرف فيه المتغيرات والميثودس الخاصة بالobjects . وبيقول كمان ان الobject بيبقي جزء من الclass وممكن نعمل اكتر من object من نفس الكلاس وبيبقي اسمه instance وكلمة object و instance تقريبا بنفس المعني. وبيقول ان العلاقة بين ال class وال object تقريبا زي فطيرة التفاح وطريقة عمل فطيرة التفاح ممكن اعمل اكتر من فطيرة تفاح بإستخدام الوصفة الواحدة.

كلاس الجافا بيستخدم المتغيرات في تعريف ال data fields والميثودس في تعريف ال behavior وكمان الكلاس بيعمل ميثود من نوع خاص اسمها constructor الميثود دي بتتنفذ اول مابعمل object من الكلاس ده. بيقول ان الconstructor ممكن تقوم بأي وظيفة ولكن في الغالب بتقوم بإعطاء المتغيرات التابعة لل objects قيم مبدئية زي كده:

كلاس circle ده مختلف شوية عن الشكل اللي احنا متعودينه اكيد طبعا اول شيء هنلاحظه انه مش فيه ميثود ال main وده معناه انه مش بقدر اعمل له run ولكن هو بس معمول علشان عن طريقه اقدر اعمل objects واستعملهم والكلاس اللي هيبقي فيه ميثود ال main هيبقي اسمه الكلاس الأساسي . لو حبينا نعمل للكلاس بتاعنا تصميم معترف بيه دوليا يبقي هنعمله مايسمي بال UML CLASS DIAGRAM وبيبقي شكله عامل كده:

وفيه المتغيرات بتتعرف فيه بالطريقة دي :

والconstructor بيتعمل كده :

والميثود بتتعرف كده :

7.3. Constructors

اول معلومة لازم نعرفها عن ال constructor هي انه بيبقي اسمه نفس اسم الكلاس اللي هو فيه وزيه زي كل الميثودس ممكن اعمل له overload (يعني اعمل اكتر من constructor بنفس الأسم ولكن بيبقوا مختلفين في باقي التعريف) وده طبعا بيسهل إعطاء المتغيرات قيم مبدئية جدا. لما نحب نعمل object من اي كلاس بننادي ال constructor بتاع الكلاس ده بإستخدام كلمة محفوظة في اللغة وهي كلمة new زي كده :

مثلا لما بنقول ()new circle كده بنعمل object من كلاس ال circle بإستخدام اول constructor في الكلاس ولو قولنا (new circle(5 هنبقي بنعمل object من نفس الكلاس ولكن بإستخدام ال constructor التاني اللي متعرف في نفس الكلاس .
الكلاس عموما بيخلق اوتوماتك constructor مش بياخد اي argument وبيكون اسم ال constructor في الحالة دي no-arg constructor او no-argument constructor .
الكلاس ممكن يتعمل بدون اي constructor وفي الحالة دي بيتخلق constructor فاضي وبيكون موجود ضمنيا في الكلاس وبيبقي اسمه default constructor وبيتعمل فقط في حالة انه متمش تعريف constructor بوضوح في الكلاس.
ملحوظة :
ال constructor هو ميثود من نوع خاص وفرقه عن الميثود العادية :
• الconstructor لازم يكون اسمه مطابق لأسم الكلاس اللي اتخلق فيه.
• الconstructors مش ليها return type ولا حتي void .
• لما بنادي اي constructor باستخدم كلمة new وبيلعب ال constructor دور تعريف المتغيرات وإعطائم قيمة مبدئية .
ملحوظة ::
من الأخطاء الشهيرة كتابة void مع ال constructor زي كده:

وفي الحالة دي ()Circle هتبقي ميثود عادية مش constructor .

7.4. Accessing Objects via Reference Variables

 

طيب دلوقتي احنا عملنا ال object ازاي اتعامل معاه بقي؟

7.4.1. Reference Variables and Reference Types

 

علشان اتعامل مع اي object بتعامل معاه عن طريق مايعرف بال reference variable بمعني اني بعرف ال object علي هيئة متغير زي كده :

والكلاس بيحدد نوع ال object مثلا كلاس الcircle لو عرفت منه object هيبقي بالمنظر ده :

عن طريق المتغير myCircle بنعمل مرجع او reference ل object من الكلاس Circle وبعد كده هنكمل تعريف الobject وهبعت المرجع او ال reference بتاعه للمتغير myCirle كده:

ممكن في جملة واحدة اعرف object من كلاس معين وابعت الreference بتاعه لمتغير معين زي كده :

ومثال علي الكلام ده :

المتغير myCircle بيحتوي علي reference او مرجع للobject اللي من الكلاس Circle .
ملحوظة ::
فيق فرق بين اني اقول ان المتغير myCircle بيحتوي علي مرجع لobject من الكلاس Circle وبين اني اقول ان المتغير myCircle هو عبارة عن object من الكلاس Circle ولكن لتسهيل الأمور هنقول ان myCircle هو object من كلاس Circle وطبعا لو انطلب توضيح الفرق لازم نكون عارفينه.

7.4.2. Accessing an Object’s Data and Methods

دلوقتي احنا عملنا object عاوزين نتعامل مع المتغيرات والميثودس الخاصة بيه :
1- لو عاوزين نتعامل مع data field هنناديه بالطريقة دي : objectRefVar.dataField
2- لو عاوزين نتعامل مع ميثود هناديها بالطريقة دي : objectRefVar.method(arguments)
يعني مثلا myCircle.radius يبقي هنتعامل مع الradius بتاع الobject اللي اسمه myCircle ولو قولنا ()myCircle.getArea يبقي هننفذ الميثود اللي اسمها ()getArea علي ال object اللي اسمه myCircle .
ملحوظة ::
في بعض الأحيان مش لازم اعرف متغير علشان يبقي فيه مرجع او reference للobject ولكن ممكن اعمل ال object علطول زي كده :

او

وفي الحالة دي ال object بيبقي اسمه anonymous object .

7.4.3. Example: Declaring Classes and Creating Objects

وده مثال علي الكلام اللي فات :

لو جينا نحلل البرنامج ده هنلاقي عندنا اتنين كلاس :
الأول TestCircle1 وده الكلاس الأساسي ومهمته هو عمل Test علي الكلاس التاني Circle . ممكن احط الكلاسين في نفس الملف ولكن لازم واحد فيهم بس هو اللي يبقي public وهو الكلاس الأساسي اللي فيه ميثود ال main وفي الحالة دي بنسمي الملف بأسم الكلاس الأساسي يعني هيبقي اسم الملف TestCircle1.java . في الكلاس الأساسي وجوه ميثود الmain عملت اتنين objects اول واحد عن طريق ال constructor اللي بياخد قيمة وهنديله قيمة 5.0 والobject التاني هسيبه بالقيمة الإفتراضية اللي هي 1.0 .
طبعا الأتنين object دول بيختلفوا في قيم الداتا اللي فيهم ولكن بيشتركوا مع بعض في نفس الميثودس وبكده ممكن احسب لكل object فيهم المساحة . ولما حبينا ننفذ ميثود ()getArea مع كل object ناديناها بأسم الobject .
فيه اكتر من طريقة لكتابة برامج الجافا مثلا ممكن دمج اكتر من كلاس في ملف واحد زي كده :


طبعا طالما الكلاس فيه ميثود ال main يبقي هيشتغل عادي جدا وال object اللي تم تخليقه هيبقي من كلاس Circle1 .
ملحوظة ::
لما جينا نتعامل مع الميثودس قولنا لما جينا نتعامل مع كلاس Math اني بنادي اي ميثودي فيه بالطريقة دي Math.pow(2,3) كنا بنستخدم اسم الكلاس وبعدين اسم الميثود بس ده كان علشان كل الميثودس اللي موجودة في كلاس ال Math من نوع static وهنشرح يعني ايه static قدام ولكن هنا في مثالنا الميثود مش من نوع static او non-static يعني علشان اناديها لازم يكون عن طريق object فقط لا غير.

Reference Data Fields and the null Value

بيقولنا ان المتغيرات في البرنامج ممكن يكونوا reference type يعني مش من الأنواع المحفوظة في اللغة زي الint , double  زي كده :


لو المتغير مش بيحمل reference لأي object في الحالة دي بحمل قيمة خاصة في الجافا اسمها null واللي عاملة زي true , false ولكن دول بيبقول قيم Boolean ولكن null بتحمل reference .
– والقيمة null في حالة الobject بتبقي بـnull
– وفي حالة المتغيرات العددية بتبقي بـ 0
– وفي حالة المتغير ال Boolean بتبقي بـ false
– وفي حالة الحروف بتبقي بـ u0000
ملحوظة ::
قبل التعامل مع اي متغير لابد من إعطاءة قيمة مبدئية او افتراضية اولا يعني كود زي ده هيطلع خطأ :

ملحوظة ::
NullPointerException ده خطأ شائع بيطلع في حالة استدعاء وتنفيذ ميثود معتمدة علي متغير يحمل قيمة null

7.4.5.Differences Between Variables of Primitive Types and Reference Types

كل متغير عندنا عبارة عن موقع في الميموري بيحتفظ بقيمة معينة ولما بنعرف متغير بعرف ال compiler نوع القيم اللي المتغير ده يقدر يحتفظ بيها. لو كان المتغير نوع من الأنواع المحفوظة هتبقي قيمته من نفس نوعه , وفي حالة لو كان المتغير بيحمل reference لobject هتبقي قيمته هي Reference لمكان ال object ده في الميموري زي كده: هنلاقي ان قيمة المتغير اللي اسمه i واللي من نوع int هتبقي int value =1 والobject اللي اسمه c ومن نوع Circle هنلاقيه بيشور او بيحمل Reference لمكان الobject Circle في الميموري:

لما باجي اقول i = j اللي بيحصل ان القيمة اللي في الj بتتنسخ في الi طيب ده في حالة المتغيرات العادية , في حالة المتغيرات اللي بتحمل reference لobject لو قولنا c1=c2 ده معناه ان قيمة ال Reference اللي في c2 هتتنسخ في c1 وهما الأتنين هيشوروا او هيحملوا نفس ال reference:

ملحوظة ::
لما حطينا قيمة ال reference بتاع الobject اللي اسمه c2 في الobject اللي اسمه c1 دلوقتي c1 قيمته القديمة اصبحت ملهاش لازمة وغير صالحة للإستخدام وده مايعرف بال garbage والجافا بتعرف القيم اللي من النوع ده واوتوماتك بتفضي المساحة اللي بتاخدها من الميموري وده مايعرف بال garbage collection.

7.5. Using Classes from the Java Library

احنا قبل كده عملنا كلاس وخلقنا فيه objects بس في البرامج ممكن نحتاج نتعامل مع كلاسات جاهزة في اللغة والسكشن ده بيدي امثلة علي بعض الكلاسات الجاهزة في الجافا .

7.5.1. The Date Class

احنا قبل كده اتعلمنا ازاي نقري الوقت بإستخدام ميثود ()System.currentTimeMillis دلوقتي هنقرأ الوقت ولكن بإستخدام كلاس جاهز اسمه Date وموجود في package اسمها java.util

طبعا زي ماحنا شايفين اول حاجة ال constructors علشان اخلق object او instance من الكلاس ده وبعد كده هنلاقي ميثود  ()getTime واللي بترجع الوقت الحالي وميثود ()toString  واللي بترجع الوقت علي هيئة string زي كده:

هتعرض الناتج بالمنظر ده:


7.5.2. The Random Class

قبل كده برده استخدمنا ميثود ()Math.random واللي بترجع قيمة بين 0-1.0 . هنلاقي هنا كلاس جاهز فيه امكانيات اعلي واحسن وهو كلاس Random واللي موجود في package اسمها java.util:

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

لحد هنا نكون تقريبا اتعرفنا إلى حد ما على المصطلحات الجديدة علينا زي كلاس وأوبجكت وكيفية اشتقاق اوبجكت من كلاس عن طريق الـ constructor ومقدمة عن لغة الـ UML وطريقة تمثيل الكلاسات بها.. وان شاء الله معادنا المرة الجاية نكمل في الـOOP  ونكمل شابتر 7.

It’s totally free to share

Thanks CAT Reloaded

Thanks CATaZine

Om4rezz

 
Leave a comment

Posted by on March 4, 2012 in Featured, Programming, Software

 

Tags: , ,

سوفت وير – ببساطة

سوفت وير – ببساطة

الكتير مننا يسمع كلمة سوفت وير وكتيرا ما نرددها  دون معرفة معناها ؟

اولا :  ما المقصود بكلمة سوفت وير ؟

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

ممكن نختصرها ايضا انها كل شئ ممكن تخزينه الكترونيًا . وينقسم السوفت وير  الى قسمين:

1- انظمة السوفت وير (Systems Software) : عبارة عن نظام يمدنا بالوظائف  الاساسية التى تمكن المستخدم من االتعامل مع الكمبيوتر، وهذه الانظمة  تتضمن نظام التشغيل  وجميع  الوسائل  المتاحة التى تمكن الكمبيوتر من اداء وظيفته .

2- تطبيقات السوفت وير (Applications software) : وتتضمن البرامج التى من خلالها   يستطيع المستخدم التعامل  مع السوفت وير بشكل مباشر مثال: برنامج  معالجة الكلمات(Word)

ثانيا : ماهى أنظمة السوفت وير ؟

تتكون من التالى:

:  (Device drivers) برنامج تشغيل البرامج

هو برنامج يسمح لبرامج على مستوى اعلى من التواصل مع الجهاز لدى المستخدم

: (Operating systems) انظمة التشغيل

هو عبارة عن مجموعة من البرامج  التى تعتبر المحرك الرئيسى  لمصادر الجهاز وتوفير الاحتياجات المشتركة  لتطبيق  السوفت وير

:  (Servers) الخادم

هو عبارة عن   برنامج  يعمل على اجابة الطلبات من البرامج الاخرى

:  (Utilities) الادوات المساعدة

 هو عبارة عن نظام سوفت وير يستخدم فى المساعدة فى تحليل  وتكوين والحفاظ على جهاز الكمبيوتر

: ( Window systems)نظام النوافذ

هو عبارة عن المكونات الرئيسية لواجهة المستخدم ،وتوجد اكثر شيوعا في بيئة سطح المكتب التي تدعم (الماوس- لوحة المفاتيح)  .

.

 

ثالثا: ما المقصود ببناء السوفت وير(Software architecture) ؟

هو هيكل   للنظام الذى يضم جميع عناصر السوفت وير والخصائص المرئية من تلك العناصر والعلاقات فيما بينهم.

رابعا : ما هى برامج التطبيقات ( Application software) ؟

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

قواعد البيانات ( Databases)

البرامج التعليمية (Educational software)

تحرير الصور (Image editing)

– البرامج الرياضية (Mathematical software )

البرامج الطبية (Medical software)

محاكاة البرمجيات (Simulation software)

 جداول البيانات (Spreadsheets)

–  الاتصالات السلكية واللاسلكية (Telecommunications)  –> مثل شبكة الإنترنت

برنامج تحرير الفيديو (Video editing software)

التصميم بمساعدة الكمبيوتر (Computer-aided design)

العاب الفيديو (Video games)

معالجة النصوص (Word processing)

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

 

 
8 Comments

Posted by on February 20, 2012 in BeBsata, Featured, Software

 

Tags:

Python: Part(7)

Python: Part(7)

في المرة اللي فاتت اتكلمنا عن ال(Conditional Statements ) وعرفنا ازاي نكتب الكود بتاعها وازاي نتعامل معاها .المرادي ان شاء الله هنتكلم عن ال(loop) بما اننا مادينهاش اهمية كبيرة المرة اللي فاتت او ما اتكملناش عنها تقريبا. ومقالة النهارده هحاول انها تبقى صغيرة عشان مندخلش في مواضيع تانية دلوقتي وهنكتفي بشرح ال(loops) النهارده .

قبل ما نتلكم عن ال(loops) تعالوا نعرف ليه احنا محتاجينها ؟

طبعا في البرمجة ممكن تحتاج انك تكرر جملة معينة اكتر من مرة . او تكرر سؤال معين اكتر من مرة او تعمل اي حاجة اكتر من مرة وبدل ما تكتب الكود بعدد المرات اللي عاوزه يتكرر ، هتكتبها مرة واحدة في (loop) وهي تتنفذ بعدد المرات اللي انت عاوزها .

في البايثون في نوعين من ال(loops)

1- while loop

2- for loop

لحد هنا كلام حلو وجميل .تعالوا بقى نشوف ازاي هنتعامل مع ال(loops) وايه الفرق بين كل نوع منهم .

 

اللي جاي دا مثال بيطبع الارقام من (1-100) بس هنعملها مرتين .. المرة الاولى هنكتب الجمل بايدينا والمرة التانية هنستخدم ال(loop) في البايثون وهنعرف ازاي نتعامل معاه .

المثال الاول :

طبعا الكود مكتوب باختصار بس المفروض انه مكتوب 100 مرة .ودا هيبقى ال(output) بتاع الكود اللي فات:

طيب بما اننا اتعلمنا البايثون عشان نكتب كود سهل ومنظم وصغير، الطبيعي اننا مش هنعمل الطريقة اللي فاتت دي في الشغل ، فأكيد هنستخدم ال(loop)

تعالوا بقى ناخد اول نوع من انواع ال(loops) :

While Loop :

بكل بساطة هنكتب الشرط وبعد كدا هنكتب اللي عاوزينه يتنفذ . وطول ما الشرط متحقق ، الكود هيفضل يتنفذ ويتكرر . تعالوا ننفذ المثال اللي فات بس المرادي باستخدام ال(while loop)

وطبعا هيكون نفس الناتج . هيطبعلنا الارقام من (1-100) وكل رقم في سطر .

ودا مثال تاني ل(while loop) :

هنا عملنا (loop) بياخد اسم من اليوزر ويطبعه – بطريقة ال (String Substitution) ودي اتعلمناها قبل كدا- وتفضل تكرر ال(loop) طول ما ال(name —> null) . يعني لو فضلت تضغط على (Enter) الكود هيفضل يتكرر طول ما انت لسة مدخلتش قيمة للمتغير .ولما تدخل قمية للمتغير بتاعك هيتنفذ ويطلع من ال(loop).

ناخد مثال تالت عشان الفكرة تثبت 🙂

البرنامج دا مكتوب في ال( ipython ) ودا بردو اتكلمنا عنه قبل كدا في الجزء الاول من سلسلة البايثون

 

 

هنا عملنا كاونتر ، وطول ما الكاونتر اقل من 10 البرنامج هيطبع (حاصل جمع القيمة اللي متخزنة في الكاونتر +الرقم اللي بيزيد معايا كل مرة) وهيطبع كل ناتج في سطر بردو .

 

كدا احنا بقينا بنعرف نعمل (loop) ونخلي الكود يتنفذ كذا مرة طيب ايه لازمة النوع التاني بقى من ال(loops) ؟

ال(while loop) بتنفذ بلوك معين من الكود بعدد معين من المرات طول ما شرط التكرار متحقق ، بس احيانا المبرمج بيحتاج انه يكرر الكود بتاعه بشكل معين أو بترتيب معين المبرمج هو اللي بيحدده ، عشان كدا ال(for loop) اتعملت .

FOR LOOP

مثال :

هنا احنا ادينا للبرنامج (list) وسمينها (x) وخليناه يتعامل معاها بال(for loop) وقولناله اطبع العناصر اللي جوا ال(list).

ودا هيكون ال(output) :

ممكن ناخد مثال تاني على ال(for loop) وهو بيتعامل مع ال(Dictionary) :

نفس الحكاية هنا ، عملنا (dictionary) وخلينا ال(for loop) تشتغل عليها بحيث انها تطبعلنا ال (key) وال(value).

ناخد المثال التالت والأخير على ال(for loop) :

وفي المثال دا احنا ادينا للبرنامج (list) فيها كذا اسم وقولتله يطبعهم في بستخدام ال(for loop)

 

كدا احنا خلصنا ال(loops) ياريت تكتبو الاكواد دي وغيروا فيها ولخبطوا الدنيا زي ما انتو عاوزين وشوفوا ايه اللي بيحصل والدنيا ماشية ازاي عشان المعلومة تثبت اكتر واكتر 🙂

المرة الجاية ان شاء الله هنتكلم عن حاجة جديدة اسمها ال(Abstraction) وهنعرف هي ايه!! وبتتكلم عن ايه باذن الله . تابعونا ،،،

 
2 Comments

Posted by on January 31, 2012 in Featured, Programming, Software

 

Tags: , , , , ,

Python: Part(6)

Python: Part(6)

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

Conditionals, Loops, and Some Other Statements

Blocks:

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


Conditions and Conditional Statements :

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

القيم التالية ينظر اليها المترجم او ال(interpreter) على انها (False) وهذا عندما يقيمها من الناحية المنطقية :

False , None , 0 ,“” , () , [] and {}

وهذا يعني ان ال(interpreter) يقوم بترجمة هذه الرموز والكلمات فقط الى (False) ، وما عدا ذلك يقوم بترجمته على انه (True) . ويجب الاخذ في الاعتبار ان قيمة False تساوي 0 ، وقيمة True تساوي 1 :

في المثال السابق يتضح انه يمكن استخدام ناتج القيم المنطقية في العمليات الحسابية ،حيث انه قام بجمع الرقم 42 والقيمة الرقمية ل(True) والتي تساوي 1 ، مع القيمة الرقمية ل(False) والتي تساوي 0 ، وهذا يعني انه تلقائيا قام  ال(interpreter) بتحويل القيم ال(bool) الى القيم الرقمية المقابلة لها كي يتمكن من استخدامها في العمليات الحسابية اذا تطلب الامر  .

 

كما ذكرنا ان القيم المنطقية (True و False) تنتمي إلى نوع(bool) ، والمثال التالي يشرح كيف يقوم ال(interpreter) بترجمة ال(Strings) الىقيم (True or False)

دعونا الان ننظر كيف تعمل الجمل الشرطية في البايثون ، والمثال التالي هو شرح لجملة (if) الشرطية والتي تعمل بالطريقة التالية :

اذا كان جواب الشرط صحيح او متوافق مع الشرط المعرف مسبقا من قبل المبرمج ، يقوم البرنامج بتنفيذ ال(Block) الذي يلي جملة الشرط .

اما اذا كان جواب الشرط غير صحيح بمعنى انه غير متوافق مع الشرط الذي يريده المبرمج ، في هذه الحالة لن يقوم البرنامج بتنفيذ ال(Block)

ولكن في بعض الاحيان يتطلب الامر ان يكون هناك اكثر من احتمال واحد في الجملة الشرطية مما يتطلب استخدام (else)

وهذا نفس المثال ولكن مع استخدام (else) :

في المثال السابق يقوم المستخدم بادخال الاسم . فإذا كان الاسم المدخل ينتهي  ب(‘Gumby‘) سيقوم البرنامج بطباعة ‘Hello, Mr. Gumby’

وفي حالة انه لم ينتهي بهذه الكلمة يقوم البرنامج بطباعة ‘Hello, stranger‘ ، وهكذا يمكن استخدام (else) لمزيد من المرونة في الجمل الشرطية.

 

كما يوجد ايضا في البايثون جملة شرطية تسمى (elif) والتي تشير الى(else if) وهذا يعني انه يمكن وضع اكثر من شرط في الجملة الشرطية الواحدة ، فإذا لم يتحقق الشرط الاول ينظر المترجم الى الشرط الثاني واذا لم يتحقق الشرط الثاني يقوم المترجم بالنظر في الشرط الثالث ، وهكذا . وهذا مثال يوضح كيفية عمل جملة (elif) الشرطية

وهذا البنامج يبدا عندما يدخل المستخدم رقما ، ثم يقوم البرنامج بالعمليات الشرطية ،فإذا كان الرقم اكبر من الصفر سوف يقوم البرنامج بطباعة ‘The number is positive‘ . واذا كان اقل من الصفر يقوم بطباعة ‘The number is negative‘ ،فيما عدا ذلك – اي ان الرقم مساوي للصفر –  يقوم البرنامج بطباعة ‘The number is zero‘ .

Nesting Blocks :

يمكن ايضا وضع جملة (if)  بداخل جملة (if) اخرى على النحو التالي :

هكذا قمنا بتوضيح كيفية التعامل مع جملة (if) الشرطية بشكل مبدئي ، وفيما يلي مقارنة بين العمليات المنطقية التي يمكن  استخدامها في الجمل الشرطية في البايثون :

في المرة القادمة ان شاء الله سوف نستكمل الحديث بشكل تفصيلي عن الجمل الشرطية وال(loops) في البايثون … تابعونا 🙂

 
3 Comments

Posted by on January 2, 2012 in Featured, Programming, Software

 

Tags: , , , ,