Document Details

DynamicNash3049

Uploaded by DynamicNash3049

Al-Wataniya Private University

د. لينا مراد

Tags

java programming object-oriented programming programming examples computer science

Summary

This document contains lecture notes for programming course (Programming 1), covering topics such as programming examples in Java, object-oriented programming, with focus on examples using classes like Product and Toy and class inheritance. Examples demonstrate polymorphism and inheritance principles.

Full Transcript

# لغات برمجة ١ ## المحاضرة الخامسة د. لينا مراد ### مثال أوجد الأخطاء البرمجية فيما يلي: ```java public class Product { private String name; private int price; public Product(){} public Product(String n, int p) {name=n;price =p;} public void print() {System.out.print(name+" "+price);} } ``` `...

# لغات برمجة ١ ## المحاضرة الخامسة د. لينا مراد ### مثال أوجد الأخطاء البرمجية فيما يلي: ```java public class Product { private String name; private int price; public Product(){} public Product(String n, int p) {name=n;price =p;} public void print() {System.out.print(name+" "+price);} } ``` ```java class Toy extends Product {private int age; public Toy(String n, int p,int a) {age =a; super(n,p); } public void print() {print(); System.out.print(age);} public double tax() { return price *0.02;} } ``` ### العملي: * أكتب تعريف لصف موظف يتضمن (الاسم - سنة التعيين - الراتب باني افتراضي - باني وسطاء * تابع طباعة - تابع لطباعة الموظف على رأس عمله أو متقاعد). * وصف مدير يتضمن (الاسم - سنة التعيين - الراتب - تعويض الادارة باني افتراضي - باني وسطاء - تابع طباعة - تابع لطباعة الموظف على رأس عمله أو متقاعد - تابع حساب راتب المدير). * مستخدماً مفهوم الوراثة * في main عرف مصفوفة من الموظفين واطبع رواتبهم. * أكتب تعريف لصف سيارة يتضمن (رقم - اللون - عدد الركاب - سعر السيارة - النوع ( عامة أو خاصة)) وصف باص يتضمن (رقم - اللون - عدد الركاب- السعر - عدد الدواليب ) بحيث يتضمن كل صف بواني - تابع طباعة - تابع حساب التأمين وهو 0.05 % من السعر للسيارة و 0.07 % من السعر للباص. # تعدد الأشكال في جافا ## Polymorphism تعدد الأشكال في جافا هو مفهوم يمكننا من خلاله تنفيذ إجراء واحد بطرق مختلفة. تعدد الأشكال مشتق من كلمتين يونانيتين: * **poly**: تعني العديد * **morphs**: تعني أشكال. لذا فإن تعدد الأشكال يعني أشكالاً عديدة. ## أنواع تعدد الأشكال هناك نوعان من تعدد الأشكال في Java: * تعدد الأشكال وقت التجميع ( الترجمة ) `compile-time polymorphism` * تعدد الأشكال وقت التشغيل. `runtime polymorphism` ## تعدد الأشكال وقت التجميع في Java يتم استخدام التحميل الزائد للطريقة `overloading` لتحقيق تعدد الأشكال وقت التجميع. يمكن أن يحتوي الصف على العديد من الطرق بنفس الاسم ولكن تختلف بقائمة الوسطاء لأنها محملة بشكل زائد. يستخدم المترجم كمية ونوع الوسطاء في الاستدعاء أثناء الترجمة لتحديد الطريقة التي سيتم استدعاؤها. يتم اتخاذ هذا الاختيار أثناء التجميع، ولهذا السبب يُطلق عليه "تعدد الأشكال وقت التجميع". ## تعدد الأشكال وقت التشغيل في Java * تعدد الأشكال وقت التشغيل هي عملية يتم فيها تحديد الطريقة المطلوب استدعاؤها في وقت التشغيل * حيث تكون الطريقة موجودة في الأب والأبناء أضافة توابع بنفس الاسم والوسطاء `(override)` وتُحدد الطريقة المناسبة حسب الغرض المستدعي والمتغير المرجعي الذي يؤشر عليه. ## Upcasting إذا كان متغير المرجع للصف الأب يؤشر إلى غرض من الصف الابن، يُعرف ذلك `Upcasting`: ```java class A{} class B extends A{} A a=new B();//upcasting ``` ### مثال ١: | | | | | | --------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | | | `Bank` | `SBI` | `ICICI` | | `getRateOfInterest`: float | | `getRateOfInterest`: float | `getRateOfInterest`: float | | | | `AXIS` | | | | | `getRateOfInterest`: float | | ### مثال ٢: ```java class Animal{ void eat(){System.out.println("animal is eating...");} } class Dog extends Animal{ void eat(){System.out.println("dog is eating...");} } class BabyDogl extends Dog{ public static void main(String args[]){ Animal a=new BabyDog1(); a.eat(); }} ``` **Output**: `Dog is eating` ### مثال ٣: ```java class Bike{ int speedlimit=90; } class Honda3 extends Bike{ int speedlimit=150; } public static void main(String args[]){ Bike obj=new Honda3(); System.out.println(obj.speedlimit); } ``` **Output**: `90` **ملاحظة**: * المتغيرات الأعضاء `data member` في `Java` لا تطبق عليها قواعد تعدد الأشكال؛ بل يتم تحديد الوصول إلى متغير العضو في وقت التجميع بواسطة نوع المرجع. * في المثال السابق نوع المرجع `Bike` فالقيمة ۹۰ حتى لو تم تعريفه باستخدام `upcasting`. ### مثال (هام): * أكتب تعريف صف دائرة يتضمن احداثيات المركز x,y ونصف القطر) باني افتراضي - باني وسطاء - تابع حساب مساحة - تابع حساب المحيط - تابع طباعة كل بيانات الدائرة مع المساحة والمحيط. * وتعريف صف مستطيل يتضمن احداثيات المركز x,y والطول والعرض) باني افتراضي - باني وسطاء - تابع حساب مساحة تابع حساب المحيط - تابع طباعة كل بيانات المستطيل مع المساحة والمحيط. * مستخدماً مفهوم الوراثة * في main عرف مصفوفة من الأشكال الهندسية واطبع بيانات كل شكل منها (مستطيل أو دائرة). ```java public class Shape { int x, y; public Shape(){} public Shape (int x, int yl) {x=x1; y=y1;} public void print() { System.out.println(x+" : "+y); } public double area() { return 0;} public double cer(){return 0;} } ``` ```java class Rectangle extends Shape { int 1,w; public Rectangle() {} public Rectangle (int x, int y, int a, int b) {super(x,y); 1=a; w=b;} public void print() { super.print(); System.out.println(1+" : "+W+" "+area () + "+cer()); } public double area(){return 1*w; } public double cer() { return 2*(1+w);} } ``` ```java class ShapeTest { public static void main(String[] args) { Shape []p=new Shape [3]; p[0]=new Rectangle(1,1,2,5); p[1]=new Circle (2,2,6); p[2]=new Rectangle(3,3,7,3); for (int i = 0; i < 3; i++) { } } } p[i].print(); ``` **Output**: ```text run: 1:1 25 10.0 14.0 2:2 6 113.09733552923255 37.69911184307752 3:3 7:3 21.0 20.0 ``` ## `getClass()` طريقة في Java في المثال السابق سنطبع الدوائر فقط: ```java public static void main(String[] args) { Shape []p=new Shape [3]; p[0]=new Rectangle (1,1,2,5); p[1]=new Circle (2,2,6); p[2]=new Rectangle (3,3,7,3); for (int i = 0; i < 3; i++) if (p[i].getClass()==Circle.class) p[i].print(); } ``` **Output**: ```text run: 2:2 6 113.09733552923255 37.69911184307752 ``` * هي طريقة موروثة من الصف `Object` والذي يعد جذر التسلسل الهرمي لصفوف `Java` وهي تسمح لنا بالحصول على نوع الصف الخاص بكائن ما في وقت التشغيل. * كل صف في `Java` يرث من `Object` بشكل مباشر أو غير مباشر. ## التجريد في جافا ## Abstraction in Java * التجريد هو التركيز على ما هو مهم - هو عملية إخفاء تفاصيل التنفيذ وإظهار الوظيفة فقط للمستخدم. * مثلاً عند إرسال الرسائل القصيرة حيث تكتب النص وترسل الرسالة و لا تعرف المعالجة الداخلية لتسليم الرسالة. ## الصف المجرد في جافا ## `abstract class` * الصف الذي يتم التصريح عنه على أنه مجرد `abstract` قبل كلمة `class` يُعرف بانه صف مجرد. * يمكن أن يحتوي الصف المجرد على طرق مجردة وغير مجردة يتم تحقيقها وتنفيذ طريقتها في الأبناء. * لا يمكن إنشاء غرض من الصف المجرد. ## الطريقة المجردة فى جافا ## `abstract method` * الطريقة المجردة هي الطريقة التي لا تتضمن تحقيق برمجي. * يتم إضافة الكلمة `abstract` بعد محدد الوصول وينتهي تعريف الطريقة بفاصلة منقوطة * لا يمكن استدعاء الطريقة المجردة حتى يقوم الأبناء بكتابة تحقيق برمجي لها. ### مثال ```java abstract class Shape { abstract void draw(); } class Rectangle extends Shape { @Override void draw() { System.out.println("drawing rectangle");} } class Circlel extends Shape { @Override void draw() { System.out.println("drawing circle");} } ``` ```java class TestAbstract { public static void main(String[] args) { Shape p=new Shape() ; } } ```

Use Quizgecko on...
Browser
Browser