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

سنطلق فيما بعد على مجلد تثبيت [Genymotion] اسم <genymotion-install>. قم بتشغيل [Genymotion]. ثم قم بتنزيل صورة لجهاز لوحي:
![]() |
- في [1]، أضف الجهاز الافتراضي الموصوف في [2]؛
10.4. تثبيت IDE IntellijIDEA Community Edition
يتوفر IDE [ Intellij IDEA Community Edition] في URL [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]، يتم تكوين SDK الخاص بنظام أندرويد؛
![]() |
- في [21-22]، يتم تحديد JDK كإعداد افتراضي للمشاريع؛
![]() | ![]() |
![]() |
- في [23-27]، يتم تعطيل التدقيق الإملائي الذي يكون افتراضيًا للغة الإنجليزية؛
![]() | ![]() |
- في [28-32]، اختر نوع اختصارات لوحة المفاتيح التي تريدها. يمكنك الاحتفاظ بالاختصارات الافتراضية لـ Intellij أو اختيار تلك الخاصة بـ IDE التي اعتدت عليها أكثر؛
![]() |
- في [33-35]، قم بتكوين IDE فيما يتعلق بالمشاريع المتعددة. يمكنه إدارة عدة مشاريع في نفس النافذة أو في نوافذ مختلفة؛
![]() |
- في [36-37]، قم بترقيم الأسطر بشكل افتراضي. سيسمح لك ذلك بالعثور بسرعة على السطر الذي تسبب في حدوث استثناء؛
10.5. استخدام الأمثلة
تتوفر مشاريع الأمثلة |IntellijIDEA| |ICI|. يشرح القسم 1.3 كيفية فتحها.
10.6. إدارة إطار العمل jSON في Java
بشكل شفاف بالنسبة للمطور، يستخدم إطار العمل [Spring MVC] مكتبة JSON [Jackson]. لتوضيح ماهية JSON (JavaScript Object Notation)، نقدم هنا برنامجًا يقوم بتسلسل الكائنات إلى 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»؛
الفئة [Personne] هي كما يلي:
package istia.st.json;
public class Personne {
// البيانات
private String nom;
private String prenom;
private int age;
// المنشئات
public Personne() {
}
public Personne(String nom, String prénom, int âge) {
this.nom = nom;
this.prenom = prénom;
this.age = âge;
}
// التوقيع
public String toString() {
return String.format("Personne[%s, %s, %d]", nom, prenom, age);
}
// أدوات الاسترجاع والتعيين
...
}
الفئة [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 {
// أداة التسلسل/إلغاء التسلسل
static ObjectMapper mapper = new ObjectMapper();
public static void main(String[] args) throws IOException {
// إنشاء شخص
Personne paul = new Personne("Denis", "Paul", 40);
// عرض JSON
String json = mapper.writeValueAsString(paul);
System.out.println("Json=" + json);
// إنشاء مثيل لـ «Personne» من JSON
Personne p = mapper.readValue(json, Personne.class);
// عرض كائن «Personne»
System.out.println("Personne=" + p);
// مصفوفة
Personne virginie = new Personne("Radot", "Virginie", 20);
Personne[] personnes = new Personne[]{paul, virginie};
// عرض JSON
json = mapper.writeValueAsString(personnes);
System.out.println("Json personnes=" + json);
// قاموس
Map<String, Personne> hpersonnes = new HashMap<String, Personne>();
hpersonnes.put("1", paul);
hpersonnes.put("2", virginie);
// عرض JSON
json = mapper.writeValueAsString(hpersonnes);
System.out.println("Json hpersonnes=" + json);
}
}
يؤدي تنفيذ هذه الفئة إلى عرض الشاشة التالية:
من هذا المثال، نستخلص ما يلي:
- الكائن [ObjectMapper] الضروري للتحويلات JSON / الكائن: السطر 11؛
- التحويل [Personne] --> JSON: السطر 17؛
- التحويل JSON --> [Personne]: السطر 20؛
- الاستثناء [IOException] الذي تم إطلاقه بواسطة الطريقتين: السطر 13.
جدول المحتويات
1 مقدمة 5
1.2Les الأدوات المستخدمة 6
1.3Les رموز الأمثلة 6
2مثال تمهيدي 9
2.1L بنية التطبيق المثال 9
2.2L الملف القابل للتنفيذ 9
2.3L'الواجهة المتزامنة 11
2.4L'استدعاء متزامن 12
2.5Tests «المكالمات المتزامنة» 13
2.6L «الواجهة غير المتزامنة وتنفيذها» 14
2.7L «الاستدعاء غير المتزامن» 16
2.8Tests: الاستدعاءات غير المتزامنة 19
2.8.1avec المجدول [Schedulers.io] 20
2.8.2avec المجدول [Schedulers.computation] 20
2.8.3avec الجدول الزمني [Schedulers.newThread] 21
2.8.4avec المجدولان [Schedulers.trampoline, Schedulers.immediate] 22
2.9Cas الحدود 22
3توقيعات الفئات والطرق العامة 27
4دوال لامدا في Java 8 32
4.1Exemple-01 - الواجهات الوظيفية ولامبدا 32
4.2Exemple-02 - الواجهة الوظيفية Predicate<T> 34
4.3Exemple-03 - الواجهة الوظيفية Function<T,R> 37
4.4Exemple-04 - الواجهة الوظيفية Consumer<T> 38
4.5Exemple-05 - الواجهة الوظيفية BiConsumer<T,U> 40
4.6Exemple-06 - الواجهة الوظيفية BiFunction<T,U,R> 41
4.7Exemple-07 - الواجهة الوظيفية Supplier<T> 43
5نوع Stream<T> في Java 8 45
5.1Exemple-01 - فئة Stream 45
5.2Exemple-02 - المعالجة المتوازية لعناصر Stream 47
5.3Exemple-03 - المعالجة المتوازية لعناصر دفق (Stream) 48
5.4Exemple-04 - تصفية دفق (Stream) 50
5.5Exemple-05 - إنشاء تيار <T2> من تيار <T1> 52
5.6Exemple-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[count] 59
5.6.6[max, min] 60
5.6.7[reduce] 63
5.6.8[sorted] 63
5.6.9[anyMatch, noneMatch, allMatch] 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.1Exemple-01: الواجهة الوظيفية [Action0] 72
6.2Exemple-02، 03: الواجهة الوظيفية [Actioni] 73
6.3Exemple-04، 05: الواجهة الوظيفية [Funci] 74
7مكتبة RxJava 77
7.1 إنشاء العناصر القابلة للمراقبة والاشتراك فيها 77
7.1.1Exemple-01: الطريقة [Observable.from] 77
7.1.2Exemple-03: فئة Observer 82
7.1.3Exemple-04: الطريقة [Observable.create] 84
7.1.4Exemple-05: إعادة هيكلة [Exemple-04] 86
7.2Thread للتنفيذ، مؤشر ترابط المراقبة 88
7.2.1Exemple-06: القابل للمراقبة والمراقب في مؤشر ترابط غير [main] 88
7.2.2Exemple-07: المتغير القابل للمراقبة والمراقب في خيطين مختلفين 90
7.3Observables محددة مسبقًا 92
7.3.1Exemple-08: الطريقة [Observable.range] 92
7.3.2Exemple-09: طرق Observable.[interval, take, doNext] 96
7.3.3Exemples-10/12: طرق Observable.[error, empty, never] 98
7.4.1Exemple-13: مؤشر ترابط الإجراء، مؤشر ترابط المراقبة 103
7.5Combinaisons لعدة متغيرات قابلة للمراقبة 106
7.5.1Exemple-14: دمج متغيرين قابلين للمراقبة مع [Observable.merge] 106
7.5.2Exemple-15: ربط متغيرين قابلين للرصد مع [Observable.concat] 108
7.5.3Exemple-16: دمج متغيرين قابلين للرصد مع [Observable.zip] 109
7.5.4Exemple-17: دمج متغيرين قابلين للرصد مع [Observable.combineLatest] 111
7.5.5Exemple-18: دمج متغيرين قابلين للرصد مع [Observable.amb] 113
7.6 سلسلة معالجة متغير قابل للرصد 114
7.6.1Exemple-19: تحويل متغير قابل للمراقبة باستخدام [Observable.map] 114
7.6.2Exemple-20: تصفية متغير قابل للمراقبة باستخدام [Observable.filter] 116
7.6.3Exemple-21: تحويل متغير قابل للمراقبة باستخدام [Observable.flapMap] 117
7.6.4Exemples-22: طرق أخرى للفئة [Observable] 123
7.7Les: المجدولات 127
7.7.1Exemple-23: برنامج الجدولة [Schedulers.computation] 127
7.7.2Exemple-24: برنامج الجدولة [Schedulers.io] 128
7.7.3Exemple-25: المجدول [Schedulers.newThread] 129
7.7.4Exemple-26: المجدولان [Schedulers.immediate, Schedulers.trampoline] 130
7.8Conclusion 133
8RxJava في بيئة Swing 134
8.1Introduction 134
8.2La بنية الكود 135
8.3 تنفيذ المشروع 136
8.4Le الخدمة المتزامنة 136
8.5Le خدمة غير متزامنة 139
8.6L «واجهة المستخدم الرسومية» 141
8.7Instanciation للواجهة الرسومية 143
8.8 تنفيذ الاستعلامات المتزامنة 144
8.9 تنفيذ الطلبات غير المتزامنة 145
9 RxJava في بيئة Android 149
9.1Introduction 149
خدمة الويب 9.2Le / jSON 149
9.2.1Le مشروع Intellij Idea 150
9.2.2Les تبعيات Gradle للمشروع 151
9.2.3La الطبقة [métier] 153
9.2.4Le خدمة الويب / JSON 156
9.2.5Configuration من مشروع Spring 160
9.2.6تشغيل خادم الويب 161
9.3Le عميل Android 161
9.3.1RxAndroid 161
مشروع IntelliJ Idea 9.3.2Le 162
9.3.3تشغيل مشروع IntelliJ Idea 164
9.3.4Les تبعيات Gradle للمشروع 166
9.3.5Le ملف مانيفست تطبيق Android 167
9.3.6La طبقة [DAO] 168
9.3.6.1L واجهة [IDao] للطبقة [DAO] 168
9.3.6.2تنفيذ الطبقة [DAO] 170
9.3.7Les: طرق عرض التطبيق 172
9.3.7.1La فئة [MyFragment] 174
9.3.7.2Le جزء [RequestFragment] من الاستعلام 176
9.3.7.3Le جزء من [ResponseFragment] من الرد 177
9.3.7.4L نشاط Android [MainActivity] 178
9.3.7.5Le جزء [RequestFragment] 185
9.3.7.6Le جزء [ResponseFragment] 187
9.3.8Les أمثلة على القيم القابلة للرصد 190
9.3.8.6Pour تابع 202
9.3.9Conclusion 202
10 المرفقات 203
10.1Installation من JDK 203
10.2Installation من SDK مدير Android 203
10.3Installation من مدير المحاكيات Genymotion 204
10.4Installation من IDE IntellijIDEA الإصدار المجتمعي 205
10.5Utilisation من الأمثلة 210
10.6Gestion من jSON بلغة Java 211

























