Skip to content

10. پیوست‌ها

در اینجا توضیح می‌دهیم که چگونه ابزارهای مورد استفاده در این سند را بر روی دستگاه‌های ویندوز 7 تا 10 نصب کنید. خوانندگان باید این دستورالعمل‌ها را با محیط خود تطبیق دهند.

10.1. نصب JDK

جدیدترین نسخه، JDK، را می‌توان در URL [http://www.oracle.com/technetwork/java/javase/downloads/index.html] (آوریل ۲۰۱۶) یافت. پوشه نصب JDK از این پس با نام <jdk-install> ذکر خواهد شد.

 

10.2. نصب مدیر اندروید SDK

 
  • در [1]، چرا به مدیر اندروید SDK نیاز داریم؛

مدیر اندروید SDK را می‌توانید در [https://developer.android.com/studio/index.html#downloads] (مهٔ ۲۰۱۶) بیابید.

 

مدیر SDK را نصب کنید. ما پوشه نصب آن را با نام <sdk-manager-install> می‌نامیم. آن را اجرا کنید.

پروژه برای (بخش 9.3.2 را ببینید) پیکربندی شده است:

  • SDK API 23 [2];
  • SDK ابزارهای ساخت 23.0.3 [3];
  • SDK Tool 25.1.3 [4]

لطفاً اطمینان حاصل کنید که این موارد را دانلود کرده‌اید.

10.3. نصب مدیر شبیه‌ساز Genymotion

شبیه‌سازهای ارائه‌شده همراه اندروید SDK کند هستند که استفاده از آن‌ها را نامطلوب می‌کند. شرکت [Genymotion] یک شبیه‌ساز با کارایی بالا ارائه می‌دهد. این شبیه‌ساز در URL [https://cloud.genymotion.com/page/launchpad/download/] (مه ۲۰۱۶) در دسترس است.

برای دریافت نسخه‌ای جهت استفاده شخصی باید ثبت‌نام کنید. محصول [Genymotion] را با ماشین مجازی VirtualBox دانلود کنید:

Image

از این پس، پوشه نصب [Genymotion] را <genymotion-install> می‌نامیم. [Genymotion] را اجرا کنید. سپس یک ایمیج برای تبلت دانلود کنید:

 
  • در [1]، ترمینال مجازی توصیف‌شده در [2] را اضافه کنید؛

10.4. نصب نسخهٔ Community Edition از IDE و IntellijIDEA

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 « » در جاوا

به‌طور شفاف برای توسعه‌دهنده، چارچوب [Spring MVC] از کتابخانه JSON [Jackson] استفاده می‌کند. برای نشان دادن اینکه 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>
  • خطوط ۱۲–۱۶: وابستگی که شامل کتابخانه «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);
    // مثال‌سازی یک Person از JSON
    Personne p = mapper.readValue(json, Personne.class);
    // نمایش یک شخص
    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);
  }
}

اجرای این کلاس خروجی صفحه زیر را تولید می‌کند:

1
2
3
4
Json={"nom":"Denis","prenom":"Paul","age":40}
Personne=Personne[Denis, Paul, 40]
Json personnes=[{"nom":"Denis","prenom":"Paul","age":40},{"nom":"Radot","prenom":"Virginie","age":20}]
Json hpersonnes={"2":{"nom":"Radot","prenom":"Virginie","age":20},"1":{"nom":"Denis","prenom":"Paul","age":40}}

نکات کلیدی از مثال:

  • شیء [ObjectMapper] مورد نیاز برای تبدیلات JSON / شیء: خط 11;
  • تبدیل [Personne] → JSON: خط 17;
  • تبدیل JSON → [Personne]: خط ۲۰؛
  • استثنای [IOException] که توسط هر دو متد پرتاب شده است: خط ۱۳.

فهرست مطالب

۱ مقدمه ۵

1.1Contexte ۵

1.2Les ابزارهای مورد استفاده ۶

1.3Les مثال‌های کد ۶

۲ یک مثال مقدماتی ۹

2.1L – معماری برنامهٔ نمونه ۹

فایل اجرایی 2.2L ۹

2.3L رابط همزمان 11

2.4L 'فراخوانی همزمان' 12

2.5Tests فراخوانی‌های همزمان ۱۳

2.6L «رابط ناهمزمان و پیاده‌سازی آن» 14

2.7L «فراخوانی ناهمزمان» 16

2.8Tests فراخوانی‌های ناهمزمان ۱۹

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] ۲۲

2.9Cas محدودیت‌ها ۲۲

2.10Conclusion 24

۳ امضاهای کلاس‌ها و متدهای عمومی 27

۴ تابع لامبدا در جاوا ۸ ۳۲

4.1Exemple-01 - رابط‌های تابعی و لامبداها ۳۲

4.2Exemple-02 – رابط تابعی Predicate<T> ۳۴

4.3Exemple-03 - رابط تابعی Function<T,R> ۳۷

4.4Exemple-04 – رابط تابعی Consumer<T> 38

4.5Exemple-05 – رابط تابعی BiConsumer<T,U> 40

4.6Exemple-06 – رابط تابعی BiFunction<T,U,R> ۴۱

4.7Exemple-07 – رابط عملکردی تأمین‌کننده<T> 43

۵ نوع Stream<T> در جاوا ۸ 45

5.1Exemple-01 – کلاس Stream 45

5.2Exemple-02 – پردازش موازی عناصر در یک استریم ۴۷

5.3Exemple-03 – پردازش موازی عناصر در یک استریم 48

5.4Exemple-04 – فیلتر کردن یک جریان ۵۰

5.5Exemple-05 - ایجاد یک Stream<T2> از یک Stream<T1> ۵۲

5.6Exemple-06 – سایر متدهای کلاس Stream<T> ۵۳

5.6.1[findFirst] ۵۴

5.6.2[findAny] 55

5.6.3[skip] 56

5.6.4[limit] 58

5.6.5[count] ۵۹

5.6.6[max, min] ۶۰

5.6.7[reduce] ۶۳

5.6.8[sorted] ۶۳

5.6.9[anyMatch, noneMatch, allMatch] 65

5.6.10[collect(Collectors.groupingBy)] ۶۵

5.6.11[distinct] ۶۷

5.6.12[flatMap] ۶۸

5.6.13 روش‌های جریان اعداد اول 71

۶ رابط‌های کاربردی کتابخانه 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: کلاس ناظر 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: مشاهده‌شونده و مشاهده‌گر در دو نخ مختلف ۹۰

7.3Observables از پیش تعریف‌شده ۹۲

7.3.1Exemple-08: متد [Observable.range] ۹۲

7.3.2Exemple-09: متدهای Observable.[interval, take, doNext] ۹۶

7.3.3Exemples-10/12: متدهای Observable.[error, empty, never] ۹۸

7.4Multi-threading 102

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] ۱۳۰

7.8Conclusion ۱۳۳

8RxJava در محیط Swing 134

8.1Introduction 134

ساختار کد 8.2La ۱۳۵

8.3 اجرای پروژه 136

8.4Le سرویس همگام ۱۳۶

8.5Le سرویس ناهمزمان ۱۳۹

8.6L رابط کاربری گرافیکی 141

8.7Instanciation رابط کاربری گرافیکی 143

8.8 اجرای پرس‌وجوهای همزمان 144

۸.۹ اجرای درخواست‌های ناهمزمان ۱۴۵

۹ RxJava در محیط اندروید ۱۴۹

9.1Introduction 149

سرویس وب 9.2Le / jSON 149

9.2.1Le پروژه IntelliJ IDEA 150

وابستگی‌های Gradle پروژه 9.2.2Les 151

9.2.3La لایه [métier] 153

9.2.4Le سرویس وب / JSON 156

9.2.5Configuration از پروژه Spring 160

۹.۲.۶ اجرای سرور وب 161

9.3Le کلاینت اندروید 161

9.3.1RxAndroid 161

9.3.2Le پروژه IntelliJ IDEA 162

۹.۳.۳ اجرای پروژه IntelliJ IDEA 164

9.3.4Les وابستگی‌های Gradle پروژه 166

9.3.5Le مانیفست برنامه اندروید 167

9.3.6La لایه [DAO] 168

9.3.6.1L رابط لایه [DAO] 168

۹.۳.۶.۲ پیاده‌سازی لایه [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 فعالیت اندروید [MainActivity] 178

قطعه 9.3.7.5Le [RequestFragment] 185

قطعه 9.3.7.6Le [ResponseFragment] 187

9.3.8Les نمونه‌هایی از قابل مشاهده‌ها ۱۹۰

9.3.8.1Exemple-01 ۱۹۰

9.3.8.2Exemple-02 193

9.3.8.3Exemple-03 195

9.3.8.4Exemple-04 197

9.3.8.5Exemple-05 198

9.3.8.6Pour ادامه 202

9.3.9Conclusion 202

10 ضمیمه‌ها 203

10.1Installation از JDK ۲۰۳

10.2Installation از SDK مدیر اندروید 203

10.3Installation از مدیر شبیه‌ساز Genymotion 204

10.4Installation از IDE نسخهٔ جامعهٔ IntellijIDEA 205

10.5Utilisation از مثال‌ها 210

10.6Gestion از jSON در جاوا 211