Summary

This document is about an introduction to programming concepts, focusing on object-oriented programming. It covers topics such as programming languages, classes, and Java programming. 

Full Transcript

# لغات البرمجة ١ ## مراجعة إلى مفاهيم البرمجة غرضية التوجه ### المحاضرة الأولى د. لينا مراد ## أنوع لغات البرمجة: تصنف لغات البرمجة كالتالي: * **اللغات اللاإجرائية:** هي لغات أوامر, أي أن المبرمج يتعامل مع اللغة عن طريق مجموع وعة من الواصفات تمثل الدخل, ووظيفة اللغة هي إرجاع خرج مناسب لذلك...

# لغات البرمجة ١ ## مراجعة إلى مفاهيم البرمجة غرضية التوجه ### المحاضرة الأولى د. لينا مراد ## أنوع لغات البرمجة: تصنف لغات البرمجة كالتالي: * **اللغات اللاإجرائية:** هي لغات أوامر, أي أن المبرمج يتعامل مع اللغة عن طريق مجموع وعة من الواصفات تمثل الدخل, ووظيفة اللغة هي إرجاع خرج مناسب لذلك الدخل. * **اللغات الإجرائية:** وتقسم إلى: * **أمر - نتيجة** * **لغات غير بنيوية:** لا تحوي بنية برمجية منظمة، و تستخدم فيها تعليمات القفز بشكل أساسي. * **لغات بنيوية:** التعليمات البرمجية منظمة ضمن (Scope) ، ولا يفترض أن نستخدم تعليمات القفز فيها، وهذا النوع بدوره يقسم إلى قسمين: * **برمجة إجرائية:** مثل ++Pascal - C * **برمجة غرضية التوجه:** #Java - C ## مفاهيم البرمجة غرضية التوجه - الصفوف Class الصف عبارة عن بنية برمجية تقوم بتجميع مجموعة من المتحولات (data members) من أنماط متعددة قد تكون أيضاً صفوفاً ومجموعة من التوابع (methods) التي تقوم بوظائف معينة على هذه المتحولات وتؤمن وسيلة تخاطب الصف مع العالم الخارجي (بقية صفوف البرنامج). يحتوي الصف كل ما يحتاجه ضمن بنيته الداخلية، وهذا ما يدعى بالكبسلة أو .Encapsulation التغليف هذا يعني أن الصف class يمثل قالباً تصنع منه الكائنات أو الأغراض في البرنامج أي أنه يتم تصميم الصف مرة واحدة واشتقاق عدد من الكائنات من هذا الصف. ## الفرق بين الصف والكائن * **الصف:** هو مفهوم مجرد (نمط) ولا يُمثل بشكل فيزيائي على الحاسب بينما **الغرض** هو عبارة عن التمثيل الفيزيائي للصف وهو الذي يحجز مساحة الذاكرة. * **فإذا كان لدينا صف دائرة يتضمن نصف القطر وتابع المساحة فعندما نحتاج الى التعامل مع دائرة يجب تعريف غرض من الدائرة لتخزين نصف القطر وبيانات الدائرة.** * **الصف:** هو القالب للأغراض التي ستعرف من الصف لاحقاً. ## محددات الوصول Access Modifiers * **عام Public:** عندما يتم تعريف عضو في الصف بمحدد وصول عام فان هذا العضو يمكن الوصول اليه من جميع الصفوف الاخرى * **خاص Private:** عندما يتم تعريف عضو في الصف بمحدد وصول خاص فان هذا العضو يستخدم داخل الصف فقط ولا تستطيع الصفوف الاخرى استخدامه * **محمي Protected:** عندما يكون محدد الوصول محمي فان هذا العضو يستخدم داخل الصف نفسه والصفوف المشتقة (الأبناء) فقط. ## المشيدات - البواني Constructor 1. هي دالة تحمل نفس اسم الفئة 2. يتم تنفيذها تلقائيا عند انشاء غرض من الصف 3. تستخدم هذه الدالة لإجراء العمليات التي نرغب في تنفيذها ابتدائياً لحظة إنشاء الغرض وقبل تعامل أي جهة مع هذا الغرض 4. يمكن للمشيدات ان تحمل وسائط لكنها لا ترجع اي قيمة حتى void access classname (parameters) { statement ; } الصيغة العامة لتعريف مشيد ## الوراثة inhertance الوراثة هي اشتقاق صفوف جديدة من صفوف موجودة. تعتبر الوراثة واحدة من أهم المميزات التي توفرها لغات البرمجة غرضية التوجه، وتسمح بالاستفادة من خصائص وتوابع الصفوف مسبقة التعريف لتعريف صفوف جديدة، بحيث لا يضطر المبرمج إلى إعادة كتابة تلك الخصائص لمرة ثانية، ولعمل علاقات جديدة تربط بين الأغراض. عندما يرث صف معين خصائص صف آخر يسمى الصف الوارث بالصف الابن subclass ويسمى الصف الموروث منه بالصف الأب supercalss. ## مقدمة إلى لغة البرمجة جافا * **Java** هي لغة برمجة عالية المستوى وقوية وغرضية التوجه وآمنة. * تم تطوير **Java** بواسطة Sun Microsystems وهي الآن شركة تابعة لشركة **Oracle** في عام ۱۹۹۵ من قبل **James Gosling** وهو يعرف بأنه الأب لجافاز. * كان اسمها Oak ثم قام James وفريقه بتغيير الاسم من **Oak** إلى **Java**. ## ميزات لغة جافا: * **Simple** - تعتبر لغة Java سهلة التعلم وقواعدها النحوية بسيطة وواضحة وسهلة الفهم. لأنها لغة برمجة بسيطة قواعدها النحوية مبنية على لغة ++C لذا يسهل على المبرمجين تعلمها بعد لغة ++C - لقد أزالت Java العديد من الميزات المعقدة والنادرة الاستخدام، مثل المؤشرات .overloading operator وتحميل المعاملات يشكل زائد ،pointer المباشرة - ليست هناك حاجة لإزالة الأغراض غير المستخدمة من الذاكرة لأن **Garbage Collection** يقوم بالعمل بشكل تلقائي في جافا. * **Object-oriented** برمجة غرضية التوجه (موجهة بالكائنات). - كل شيء في جافا هو كائن. - البرمجة الموجهة للكائنات OOP هي منهجية تبسط تطوير البرامج وصيانتها من خلال توفير بعض القواعد. - Object - Class - Inheritance - Polymorphism - Abstraction - Encapsulation * **Platform Independent** جافا مستقلة عن منصة العمل: - جافا تختلف عن اللغات الأخرى مثل C و ++C وغيرها والتي يتم تنفيذها في بيئات ومنصات خاصة. بينما جافا هي لغة كتابة مرة واحدة وتشغيل في أي مكان. - يمكن تنفيذ كود جافا على منصات متعددة، على سبيل المثال، Windows و Linux و Sun Solaris و MacOS وما إلى ذلك. يتم تجميع كود جافا بواسطة المترجم وتحويله إلى bytecode و bytecode هو كود مستقل عن المنصة لأنه يمكن تشغيله على منصات متعددة، أي الكتابة مرة واحدة والتشغيل في أي مكان WORA. * **Secured** لغة جافا آمنة: - يمكننا باستخدام Java تطوير أنظمة خالية من الفيروسات. - لا يوجد مؤشر صريح. - تعمل برامج Java داخل بيئة الآلة الافتراضية * **Architecture-neutral** محايدة للهندسة المعمارية - تعتبر لغة Java محايدة للهندسة المعمارية لأنها لا تحتوي على ميزات تعتمد على معمارية الحاسب. - مثال في برمجة C : يشغل نوع البيانات int بايتين من الذاكرة للحواسيب ذات ٣٢ بت و ٤ بايتات من الذاكرة للحواسيب ذات ٦٤ بت. أما في جافا فإن int يشغل ٤ بايتات من الذاكرة لكل من الحواسيب ذات ٣٢ بت و ٦٤ بت * **Portable-** محمولة - تعتبر لغة Java محمولة لأنه يمكن نقل bytecode إلى أي منصة. ولا تتطلب أي تحقيق برمجي اضافي. * **High-performance-** أداء عالي - تعتبر لغة Java أسرع من لغات البرمجة التقليدية الأخرى المفسرة لأن Java bytecode يشبه من لغة الآلة. ولا تزال أبطأ قليلاً من اللغة المترجمة مثل C و ++C. ## Hello World Example ```Java class Simple { public static void main(String args[]) { System.out.println("Hello Java"); } } ``` To compile: javac Simple.java To execute: java Simple ## Hello World Example <img src="https://i.imgur.com/y8I9919.png" alt="Image of a Hello World Example diagram. Arrows show how Java code, the compiler, and byte code all link."/> ## Data Types in Java أنواع البيانات في جافا * **byte**-**char**-**Boolean**: أنواع البيانات البسيطة وتشمل Primitive data types * **double**-**float**-**long**-**it**-**short** * **Classes**: أنواع البيانات غير البسيطة أو المركبة : تشمل .Arrays-Interfaces ، <img src="https://i.imgur.com/h22e07G.png" alt="Image of a diagram showing data types in Java categorized as primitive, non-primitive, integral, and floating-point."/> ## Data Types in Java أنواع البيانات في جافا | Data Type | Default Value | Default size | |:-----------:|:----------------:|:--------------:| | boolean | false | 1 bit | | char | '\u0000' | 2 byte | | byte | 0 | 1 byte | | short | 0 | 2 byte | | int | 0 | 4 byte | | long | OL | 8 byte | | float | 0.0f | 4 byte | | double | 0.0d | 8 byte | ## Java Variables المتغيرات في جافا : 1. **Local Variable** المتغير المحلي - هو المتغير المصرح عنه داخل نص الطريقة method. يمكن استخدام هذا المتغير فقط داخل هذه الطريقة والطرق الأخرى في الصف لا تدرك حتى أن المتغير موجود. 2. **Instance Variable** المتحول المثيل Data member - هو المتحول المصرح عنه داخل الصف وخارج الطرق 3. **Static variable** المتحول الساكن : - لا يمكن أن يكون محليًا. يمكنك إنشاء نسخة واحدة من المتغير الساكن ومشاركتها بين جميع أغراض الصف. يحدث تخصيص الذاكرة للمتغيرات الساكنة مرة واحدة فقط عند تحميل الصف في الذاكرة. <img src="https://i.imgur.com/C84S78d.png" alt="Image of a diagram showing a tree with branches for the different types of Java variables: instance, static, and local."/> ## مثال: ```Java public class Simple{ public static void main(String[] args){ int a=10; int b=10; int c=a+b; System.out.println(c); } } ``` Output: 20 ## مثال: ```Java public class Simple{ public static void main(String[] args){ int a=10; float f=a; System.out.println(a); System.out.println(f); }} ``` Output: 10 10.0 ## مثال: ```Java public class Simple{ public static void main(String[] args){ float f=10.5f; //int a=f;//Compile time error int a=(int)f; System.out.println(f); System.out.println(a); }} ``` Output: 10.5 10 ## مثال: ```Java class Simple{ public static void main(String[] args){ byte a=10; byte b=10; //byte c=a+b;//Compile Time Error: because a+b=20 will be int byte c=(byte)(a+b); System.out.println(c); }} ``` Output: 20 ## Operators in Java العمليات في جافا | Operator Type | Category | Precedence | |:-----------:|:----------------:|:--------------:| | Unary المعامل الأحادي | postfix | expr++ expr-- | | | prefix | ++expr--expr | | Arithmetic الرياضية | multiplicative | */% | | | additive | +- | | Shift الازاحة | shift | << >> >>> | | Relational علائقي | comparison | < > <= >= instanceof | | | equality | == != | | Bitwise | bitwise AND | & | | | bitwise exclusive OR | ^ | | | bitwise inclusive OR | | | Logical منطقية | logical AND | && | | | logical OR | || | | Ternary معامل ثلاثي | ternary | ?: | | Assignment الاسناد | assignment | = += -= *= /= %= &= ^= |= <<= >>= >>>= | ## مثال: ```Java public class OperatorExample{ public static void main(String args[]){ int x=10; System.out.println(x++); System.out.println(++x); System.out.println(x--); System.out.println(--x); }} ``` Output: 10 12 12 10 ## مثال: ```Java public class OperatorExample{ public static void main(String args[]){ int a=10; int b=10; System.out.println(a++ + ++a);//10+12=22 System.out.println(b++ + b++);//10+11=21 }} ``` ## مثال: ```Java public class OperatorExample{ public static void main(String args[]){ int a=10; int b=5; System.out.println(a+b); System.out.println(a-b); System.out.println(a*b); System.out.println(a/b); System.out.println(a%b); }} ``` Output: 15 5 50 2 0 ## مثال: ```Java public class OperatorExample{ public static void main(String args[]){ System.out.println(10*10/5+3-1*4/2); }} ``` 21 ## مثال: ```Java public class OperatorExample{ public static void main(String args[]){ int a=10; int b=5; int c=20; System.out.println(a<b&&a++<c);//false && true = false System.out.println(a);//10 because second condition is not checked System.out.println(a<b&a++<c);//false && true = false System.out.println(a);//11 because second condition is checked }} ``` ## مثال: ```Java public class OperatorExample{ public static void main(String args[]){ int a=2; int b=5; int min=(a<b)?a:b; System.out.println(min); }} ``` Output: 2 ## مثال: ```Java public class OperatorExample{ public static void main(String args[]){ int a=10; int b=20; a+=4;//a=a+4 (a=10+4) b-=4;//b=b-4 (b=20-4) System.out.println(a); System.out.println(b); }} ``` Output: 14 16 ## مثال: ```Java public class OperatorExample{ public static void main(String args[]){ short a=10; short b=10; //a+=b;//a=a+b internally so fine a=a+b;//Compile time error because 10+10=20 now int System.out.println(a); }} ```

Use Quizgecko on...
Browser
Browser