10. الملاحق
نشرح هنا كيفية تثبيت الأدوات المستخدمة في هذا المستند على أجهزة Windows 7 إلى 10. يجب على القراء تكييف هذه الإرشادات مع بيئتهم الخاصة.
10.1. تثبيت JDK
يمكن العثور على أحدث إصدار من JDK على الرابط [http://www.oracle.com/technetwork/java/javase/downloads/index.html] (أبريل 2016). سنشير إلى مجلد تثبيت JDK باسم <jdk-install> فيما يلي.
![]() |
10.2. تثبيت Android SDK Manager
![]() |
- انظر [1] لمعرفة سبب حاجتنا إلى حزمة تطوير تطبيقات Android (SDK)؛
يمكن العثور على Android SDK Manager على [https://developer.android.com/studio/index.html#downloads] (مايو 2016).
![]() |
قم بتثبيت SDK Manager. سنشير إلى دليل التثبيت الخاص به باسم <sdk-manager-install> ( ). قم بتشغيله.
تم تكوين المشروع لـ (انظر القسم 9.3.2):
- SDK API 23 [2]؛
- أدوات إنشاء SDK 23.0.3 [3]؛
- أداة SDK 25.1.3 [4]
تأكد من تنزيل هذه المكونات.
10.3. تثبيت Genymotion Emulator Manager
المحاكيات المرفقة مع Android SDK بطيئة، مما يثني عن استخدامها. تقدم شركة [Genymotion] محاكيًا عالي الأداء. وهو متاح على الرابط [https://cloud.genymotion.com/page/launchpad/download/] (مايو 2016).
ستحتاج إلى التسجيل للحصول على نسخة للاستخدام الشخصي. قم بتنزيل منتج [Genymotion] مع الجهاز الظاهري VirtualBox:

سنشير إلى مجلد تثبيت [Genymotion] باسم <genymotion-install> من الآن فصاعدًا. قم بتشغيل [Genymotion]. ثم قم بتنزيل صورة لجهاز لوحي:
![]() |
- في [1]، أضف المحطة الطرفية الافتراضية الموضحة في [2]؛
10.4. تثبيت بيئة تطوير التطبيقات (IDE) IntelliJ IDEA Community Edition
يتوفر بيئة تطوير التطبيقات [IntelliJ IDEA Community Edition] على [https://www.jetbrains.com/idea/#chooseYourEdition]:
![]() |
قم بتثبيت IDE ثم قم بتشغيله.
![]() | ![]() |
- في [1-2]، قم بتكوين المكونات الإضافية؛
- في [3-4]، أضف المكون الإضافي [Genymotion] إلى بيئة تطوير التطبيقات (IDE)؛
![]() |
- في [6-7]، قم بتكوين IDE؛
![]() | ![]() |
- في [8-9]، حدد مجلد التثبيت لمدير المحاكي [Genymotion]؛
![]() |
- في [12-13]، قم بتكوين نوع المشروع الافتراضي؛
![]() | ![]() |
![]() |
- في [14-16]، قم بتكوين JDK؛
![]() |
![]() | ![]() |
- في [17-20]، قم بتكوين Android SDK؛
![]() |
- في [21-22]، حدد JDK الافتراضي للمشاريع؛
![]() | ![]() |
![]() |
- في [23-27]، قم بتعطيل التدقيق الإملائي، الذي يتم ضبطه على اللغة الإنجليزية بشكل افتراضي؛
![]() | ![]() |
- في [28-32]، اختر نوع اختصارات لوحة المفاتيح التي تريدها. يمكنك الاحتفاظ بالإعدادات الافتراضية لـ IntelliJ أو اختيار تلك الموجودة في بيئة تطوير متكاملة (IDE) أخرى أكثر اعتيادًا عليها؛
![]() |
- في [33-35]، قم بتكوين بيئة التطوير المتكاملة (IDE) لمشاريع متعددة. يمكنها إدارة عدة مشاريع في نفس النافذة أو في نوافذ مختلفة؛
![]() |
- في [36-37]، قم بتمكين ترقيم الأسطر بشكل افتراضي. سيسمح لك ذلك بالعثور بسرعة على السطر الذي تسبب في حدوث استثناء؛
10.5. استخدام الأمثلة
تتوفر مشاريع IntelliJ IDEA الخاصة بالأمثلة |هنا|. يشرح القسم 1.3 كيفية فتحها.
10.6. إدارة JSON في Java
بشكل شفاف للمطور، يستخدم إطار عمل [Spring MVC] مكتبة [Jackson] JSON. لتوضيح ما هو JSON (ترميز كائنات JavaScript)، نقدم هنا برنامجًا يقوم بتسلسل الكائنات إلى JSON ويقوم بالعكس عن طريق إلغاء تسلسل سلاسل JSON التي تم إنشاؤها لإعادة إنشاء الكائنات الأصلية.
تسمح لك مكتبة "Jackson" بإنشاء:
- سلسلة JSON لكائن: new ObjectMapper().writeValueAsString(object);
- كائن من سلسلة JSON: new ObjectMapper().readValue(jsonString, Object.class).
قد ترمي كلتا الطريقتين استثناء IOException. إليك مثال على ذلك.
![]() |
المشروع أعلاه هو مشروع Maven يحتوي على ملف [pom.xml] التالي؛
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>istia.st</groupId>
<artifactId>json</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.3.3</version>
</dependency>
</dependencies>
</project>
- الأسطر 12–16: التبعية التي تتضمن مكتبة 'Jackson'؛
فئة [Person] هي كما يلي:
package istia.st.json;
public class Personne {
// data
private String nom;
private String prenom;
private int age;
// manufacturers
public Personne() {
}
public Personne(String nom, String prénom, int âge) {
this.nom = nom;
this.prenom = prénom;
this.age = âge;
}
// signature
public String toString() {
return String.format("Personne[%s, %s, %d]", nom, prenom, age);
}
// getters and setters
...
}
فئة [Main] هي كما يلي:
package istia.st.json;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class Main {
// the serialization / deserialization tool
static ObjectMapper mapper = new ObjectMapper();
public static void main(String[] args) throws IOException {
// creation of a person
Personne paul = new Personne("Denis", "Paul", 40);
// json display
String json = mapper.writeValueAsString(paul);
System.out.println("Json=" + json);
// person instantiation from Json
Personne p = mapper.readValue(json, Personne.class);
// person display
System.out.println("Personne=" + p);
// a picture
Personne virginie = new Personne("Radot", "Virginie", 20);
Personne[] personnes = new Personne[]{paul, virginie};
// json display
json = mapper.writeValueAsString(personnes);
System.out.println("Json personnes=" + json);
// dictionary
Map<String, Personne> hpersonnes = new HashMap<String, Personne>();
hpersonnes.put("1", paul);
hpersonnes.put("2", virginie);
// json display
json = mapper.writeValueAsString(hpersonnes);
System.out.println("Json hpersonnes=" + json);
}
}
يؤدي تنفيذ هذه الفئة إلى إخراج الشاشة التالي:
النقاط الرئيسية المستفادة من المثال:
- كائن [ObjectMapper] المطلوب لتحويلات JSON/Object: السطر 11؛
- تحويل [Person] --> JSON: السطر 17؛
- تحويل JSON --> [Person]: السطر 20؛
- استثناء [IOException] الذي تم إلقائه بواسطة كلتا الطريقتين: السطر 13.
جدول المحتويات
1 مقدمة 5
1.1 الخلفية 5
1.2 الأدوات المستخدمة 6
1.3 أمثلة الأكواد 6
2 مثال على مقدمة 9
2.1 بنية التطبيق النموذجي 9
2.2 الملف القابل للتنفيذ 9
2.3 الواجهة المتزامنة 11
2.4 الاستدعاء المتزامن 12
2.5 اختبار المكالمات المتزامنة 13
2.6 الواجهة غير المتزامنة وتنفيذها 14
2.7 المكالمة غير المتزامنة 16
2.8 اختبار المكالمات غير المتزامنة 19
2.8.1 باستخدام المجدول [Schedulers.io] 20
2.8.2 باستخدام المجدول [Schedulers.computation] 20
2.8.3 باستخدام المجدول [Schedulers.newThread] 21
2.8.4 مع المجدولين [Schedulers.trampoline، Schedulers.immediate] 22
2.9 الحالات الاستثنائية 22
2.10 الخلاصة 24
3توقيعات الفئات والأساليب العامة 27
4 تعبيرات لامدا في Java 8 32
4.1 المثال-01 - الواجهات الوظيفية ولامبدا 32
4.2 المثال-02 - الواجهة الوظيفية Predicate<T> 34
4.3 المثال-03 - الواجهة الوظيفية Function<T,R> 37
4.4 المثال-04 - الواجهة الوظيفية Consumer<T> 38
4.5 المثال-05 - الواجهة الوظيفية BiConsumer<T,U> 40
4.6 المثال-06 - الواجهة الوظيفية BiFunction<T,U,R> 41
4.7 المثال 07 - الواجهة الوظيفية Supplier<T> 43
5نوع Stream<T> في Java 8 45
5.1 المثال-01 - فئة Stream 45
5.2 المثال 02 - المعالجة المتوازية لعناصر Stream 47
5.3 المثال 3 - المعالجة المتوازية لعناصر الدفق 48
5.4 المثال 04 - تصفية دفق 50
5.5 المثال رقم 05 - إنشاء Stream<T2> من Stream<T1> 52
5.6 المثال-06 - طرق أخرى لفئة Stream<T> 53
5.6.1 [findFirst] 54
5.6.2 [findAny] 55
5.6.3 [skip] 56
5.6.4 [limit] 58
5.6.5[العدد] 59
5.6.6[الحد الأقصى، الحد الأدنى] 60
5.6.7[تقليل] 63
5.6.8[مرتبة] 63
5.6.9[أي مطابقة، لا مطابقة، كل المطابقات] 65
5.6.10[collect(Collectors.groupingBy)] 65
5.6.11[distinct] 67
5.6.12[flatMap] 68
5.6.13 طرق تدفق الأعداد الأولية 71
6الواجهات الوظيفية في مكتبة RxJava 72
6.1 المثال-01: الواجهة الوظيفية [Action0] 72
6.2 المثالان 02 و 03: الواجهة الوظيفية [Actioni] 73
6.3 المثالان 04 و 05: الواجهة الوظيفية [Funci] 74
7 مكتبة RxJava 77
7.1 إنشاء المراقبين والاشتراك فيها 77
7.1.1 المثال-01: طريقة [Observable.from] 77
7.1.2 المثال 03: فئة Observer 82
7.1.3 المثال 04: طريقة [Observable.create] 84
7.1.4 المثال-05: إعادة هيكلة [المثال-04] 86
7.2 مؤشر ترابط التنفيذ، مؤشر ترابط المراقبة 88
7.2.1 المثال-06: العنصر القابل للمراقبة والمراقب في مؤشر ترابط غير [main] 88
7.2.2 المثال-07: العنصر القابل للمراقبة والمراقب في خيطين مختلفين 90
7.3 العناصر القابلة للمراقبة المحددة مسبقًا 92
7.3.1 المثال-08: طريقة [Observable.range] 92
7.3.2 المثال-09: طرق Observable.[interval، take، doNext] 96
7.3.3 الأمثلة 10/12: طرق Observable.[error، empty، never] 98
7.4 تعدد الخيوط 102
7.4.1 المثال 13: سلسلة الإجراءات، سلسلة الملاحظات 103
7.5 مجموعات من العناصر القابلة للملاحظة المتعددة 106
7.5.1 المثال 14: دمج عنصرين قابلين للمراقبة باستخدام [Observable.merge] 106
7.5.2 المثال 15: ربط متغيرين قابلين للمراقبة باستخدام [Observable.concat] 108
7.5.3 المثال 16: دمج متغيرين قابلين للمراقبة باستخدام [Observable.zip] 109
7.5.4 المثال 17: دمج متغيرين قابلين للمراقبة باستخدام [Observable.combineLatest] 111
7.5.5 المثال 18: دمج متغيرين قابلين للمراقبة باستخدام [Observable.amb] 113
7.6 سلسلة المعالجة لقيمة قابلة للمراقبة 114
7.6.1 المثال 19: تحويل متغير قابل للمراقبة باستخدام [Observable.map] 114
7.6.2 المثال 20: تصفية متغير قابل للمراقبة باستخدام [Observable.filter] 116
7.6.3 المثال 21: تحويل متغير قابل للمراقبة باستخدام [Observable.flapMap] 117
7.6.4 المثال 22: طرق أخرى لفئة [Observable] 123
7.7 المجدولات 127
7.7.1 المثال 23: المجدول [Schedulers.computation] 127
7.7.2 المثال 24: المجدول [Schedulers.io] 128
7.7.3 المثال 25: المجدول [Schedulers.newThread] 129
7.7.4 المثال 26: المجدولات [Schedulers.immediate، Schedulers.trampoline] 130
7.8 الخاتمة 133
8 RxJava في بيئة Swing 134
8.1 مقدمة 134
8.2 بنية الكود 135
8.3 تنفيذ المشروع 136
8.4 الخدمة المتزامنة 136
8.5 الخدمة غير المتزامنة 139
8.6 واجهة المستخدم الرسومية 141
8.7 إنشاء مثيل لواجهة المستخدم الرسومية 143
8.8 تنفيذ الطلبات المتزامنة 144
8.9 تنفيذ الطلبات غير المتزامنة 145
9 RxJava في بيئة Android 149
9.1 مقدمة 149
9.2 خدمة الويب / JSON 149
9.2.1 مشروع IntelliJ IDEA 150
9.2.2 تبعيات Gradle للمشروع 151
9.2.3 طبقة [الأعمال] 153
9.2.4 خدمة الويب / JSON 156
9.2.5 تكوين مشروع Spring 160
9.2.6 تشغيل خادم الويب 161
9.3 عميل Android 161
9.3.1 RxAndroid 161
9.3.2 مشروع IntelliJ IDEA 162
9.3.3 تشغيل مشروع IntelliJ IDEA 164
9.3.4 تبعيات Gradle للمشروع 166
9.3.5 ملف تعريف تطبيق Android 167
9.3.6 طبقة [DAO] 168
9.3.6.1 واجهة [IDao] لطبقة [DAO] 168
9.3.6.2 تنفيذ طبقة [DAO] 170
9.3.7 طرق عرض التطبيق 172
9.3.7.1 فئة [MyFragment] 174
9.3.7.2جزء [RequestFragment] من الطلب 176
9.3.7.3 جزء [ResponseFragment] من الاستجابة 177
9.3.7.4 [MainActivity] في Android 178
9.3.7.5 جزء [RequestFragment] 185
9.3.7.6 الجزء [ResponseFragment] 187
9.3.8 أمثلة على العناصر القابلة للمراقبة 190
9.3.8.1 المثال-01 190
9.3.8.2 المثال-02 193
9.3.8.3 المثال 03 195
9.3.8.4 المثال 04 197
9.3.8.5 المثال 05 198
9.3.8.6 للمتابعة 202
9.3.9 الخلاصة 202
10 الملاحق 203
10.1 تثبيت JDK 203
10.2 تثبيت Android SDK Manager 203
10.3 تثبيت Genymotion Emulator Manager 204
10.4 تثبيت بيئة تطوير البرامج (IDE) IntelliJ IDEA Community Edition 205
10.5 استخدام الأمثلة 210
10.6 العمل مع JSON في Java 211

























