Skip to content

Commit

Permalink
Merge pull request #394 from cortix/draft
Browse files Browse the repository at this point in the history
Update post
  • Loading branch information
cortix authored Dec 30, 2023
2 parents a466288 + b6b40b1 commit 2747f16
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 30 deletions.
21 changes: 10 additions & 11 deletions _posts/2023-12-28-java-module-system.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,37 +39,37 @@ Bu, **[Project Jigsaw](https://openjdk.org/projects/jigsaw/)**'da prototipi olu
* **Güvenilir yapılandırma (reliable configuration):** Kırılgan, hataya açık sınıf yolu (class-path) mekanizmasını, program bileşenlerinin birbirlerine açık bağımlılıklarını bildirecek bir araçla değiştirmek için *güvenilir yapılandırma (reliable configuration)*, bununla birlikte,
* **Güçlü kapsülleme (strong encapsulation):** Bir bileşenin hangi "public" türlerinin diğer bileşenler tarafından erişilebilir olduğunu ve hangilerinin erişilebilir olmadığını bildirmesine olanak tanıyan *güçlü kapsülleme (strong encapsulation)*.

Bu özellikler uygulama geliştiricilerine, kütüphane (library) geliştiricilerine ve Java SE Platformu uygulayıcılarına doğrudan ve ayrıca dolaylı olarak fayda sağlayacaktır çünkü bunlar ölçeklenebilir bir platform, daha fazla platform bütünlüğü ve gelişmiş performans sağlayacaktır.
Bu özellikler, uygulama geliştiricilerine, kütüphane (library) geliştiricilerine ve Java SE Platformu uygulayıcılarına doğrudan ve ayrıca dolaylı olarak fayda sağlayacaktır, çünkü bunlar ölçeklenebilir bir platform, daha fazla platform bütünlüğü ve gelişmiş performans sağlayacaktır.


Bu, bu dökümanın ikinci baskısıdır. [İlk baskıya](https://openjdk.org/projects/jigsaw/spec/sotms/2015-09-08) göre bu baskı, [uyumluluk ve migrasyon](https://openjdk.org/projects/jigsaw/spec/sotms/#compatibility--migration) (compatibility and migration) ilgili materyalleri sunar, [yansıtıcı okunabilirlik](https://openjdk.org/projects/jigsaw/spec/sotms/#reflective-readability) (reflective readability) tanımını gözden geçirir, anlatının(narrative) akışını iyileştirmek için metni yeniden sıralar ve daha kolay gezinme için "iki seviyeli (two-level)“ bir bölüm ve alt bölüm hiyerarşisi halinde düzenlenir.
Bu, bu dökümanın ikinci baskısıdır. [İlk baskıya](https://openjdk.org/projects/jigsaw/spec/sotms/2015-09-08) göre bu baskı, [uyumluluk ve migrasyon](https://openjdk.org/projects/jigsaw/spec/sotms/#compatibility--migration) (compatibility and migration) ile ilgili materyaller sunar, [yansıtıcı okunabilirlik](https://openjdk.org/projects/jigsaw/spec/sotms/#reflective-readability) (reflective readability) tanımını gözden geçirir, anlatının(narrative) akışını iyileştirmek için metni yeniden sıralar ve daha kolay gezinme için "iki seviyeli (two-level)“ bir bölüm ve alt bölüm hiyerarşisi halinde düzenlenir.

Tasarımda hâlâ pek çok [açık sorunlar](https://openjdk.org/projects/jigsaw/spec/issues/) (open issues) bulunmaktadır ve bunların çözümleri bu belgenin gelecek sürümlerinde yansıtılacaktır.


## DEFINING MODULES (modüllerin tanımlanması)

Hem geliştiriciler için ulaşılabilir hem de mevcut araç zincirleri tarafından desteklenebilir bir şekilde <u>güvenilir yapılandırma</u> (*reliable configuration*) ve <u>güçlü kapsülleme</u> (*strong encapsulation*) sağlamak için modülleri temel bir yeni tür Java program bileşeni olarak ele alıyoruz. *Modül*, adlandırılmış, kendi kendini tanımlayan bir kod ve veri koleksiyonudur. Kodu, tür içeren bir dizi paket olarak organize edilmiştir, *örneğin*, Java sınıfları ve arayüzleri; Verileri(its data), kaynakları (resources) ve diğer statik bilgileri içerir.
Hem geliştiriciler için ulaşılabilir hem de mevcut araç zincirleri tarafından desteklenebilir bir şekilde <u>güvenilir yapılandırma</u> (*reliable configuration*) ve <u>güçlü kapsülleme</u> (*strong encapsulation*) sağlamak için modülleri temel bir yeni tür Java program bileşeni olarak ele alıyoruz. *Modül*, adlandırılmış (named), kendi kendini tanımlayan (self-describing) bir kod ve veri koleksiyonudur. Kodu (yani modülün kodu), tür içeren bir dizi paket olarak organize edilmiştir, *örneğin*, Java sınıfları ve arayüzleri; verileri(its data), kaynakları (resources) ve diğer statik bilgileri içerir.


### 1.1 Module declarations (modül deklarasyonları/bildirimleri)

Bir modülün kendi açıklaması, Java programlama dilinin yeni bir yapısı olan modül deklarasyonunda (*module declaration*) ifade edilir. Mümkün olan en basit modül deklarasyonu yalnızca modülünün adını belirtir:
Bir modülün kendi kendini açıklaması (self-description), Java programlama dilinin yeni bir yapısı olan modül deklarasyonunda (*module declaration*) ifade edilir. Mümkün olan en basit modül deklarasyonu yalnızca modülünün adını belirtir:

{% highlight java linenos %}
module com.foo.bar {
}
{% endhighlight %}

Modülün hem <u>derleme</u> hem de <u>çalışma</u> zamanında, başka modüllere adıyla(*by name*) bağımlı olduğunu bildirmek için bir veya daha fazla `requires` clauses eklenebilir:
Modülün hem <u>derleme</u> hem de <u>çalışma</u> zamanında, başka modüllere adıyla(*by name*) bağımlı olduğunu bildirmek için bir veya daha fazla `requires` cümleciği (*clause*) eklenebilir:

{% highlight java linenos %}
module com.foo.bar {
requires org.baz.qux;
}
{% endhighlight %}

Son olarak, modülün belirli paketlerdeki yalnızca `public` olan bütün türlerini (*types*) diğer modüller tarafından kullanılabilir hale getirdiğini bildirmek için `exports` clauses eklenebilir:
Son olarak, modülün belirli paketlerdeki yalnızca `public` olan bütün türlerini (*types*) diğer modüller tarafından kullanılabilir hale getirdiğini bildirmek için `exports` cümleciği (*clause*) eklenebilir:

{% highlight java linenos %}
module com.foo.bar {
Expand All @@ -79,12 +79,12 @@ module com.foo.bar {
}
{% endhighlight %}

Bir modülün deklarasyonu hiçbir `exports` cümleciği içermiyorsa, o zaman hiçbir türü diğer modüllere aktarmaz.
Bir modülün deklarasyonu hiçbir `exports` cümleciği (*clause*) içermiyorsa, o zaman hiçbir türü diğer modüllere aktarmaz.

(**Benim notum :** Yani ilgili modülü `requires` ile talep etsek bile, bu modülün dışarı aktarılan (yani `exports` edilen) bir paketi yoksa o modüle ulaşılmaz.)
{: .notice--warning}

Bir modül deklarasyonunun kaynak kodu, geleneksel olarak, modülün kaynak dosya (*module’s source-file*) hiyerarşisinin kökündeki (*root*) `module-info.java` adlı bir dosyaya yerleştirilir. `com.foo.bar` modülü için kaynak dosyalar örneğin şunları içerebilir:
Bir modül deklarasyonunun kaynak kodu (*source code*), geleneksel olarak, modülün kaynak dosya (*module’s source-file*) hiyerarşisinin kökündeki (*root*) `module-info.java` adlı bir dosyaya yerleştirilir. `com.foo.bar` modülü için kaynak dosyalar örneğin şunları içerebilir:

{% highlight java linenos %}
module-info.java
Expand All @@ -95,14 +95,13 @@ com/foo/bar/alpha/Alpha.java

Bir modül deklarasyonu, geleneksel olarak, sınıf dosyası çıktı dizinine ( *class-file output directory*) benzer şekilde yerleştirilen `module-info.class` adlı bir dosyaya derlenir.

Paket adları gibi modül adları da çakışmamalıdır. Bir modülü adlandırmanın önerilen yolu, paketlerin adlandırılmasında uzun süredir önerilen <u>reverse-domain-name</u> paternini kullanmaktır. Bu nedenle bir modülün adı genellikle "dışa aktarılan (*exported*) paketlerin adlarının <u>öneki</u> olacaktır, ancak bu ilişki zorunlu değildir.
Paket adları gibi modül adları da çakışmamalıdır. Bir modülü adlandırmanın önerilen yolu, paketlerin adlandırılmasında uzun süredir önerilen <u>reverse-domain-name</u> paternini kullanmaktır. Bu nedenle bir modülün adı genellikle dışa aktarılan (*export* edilen) paketlerin adlarının <u>öneki</u> olacaktır, ancak bu ilişki zorunlu değildir.

Bir modülün deklarasyonu bir sürüm dizesi (*version string*) içermediği gibi, bağlı olduğu modüllerin sürüm dizeleri üzerinde de kısıtlamalar içermez. Bu kasıtlıdır: sürüm-seçimi (*version-selection*) sorununu çözmek modül sisteminin [bir amacı](https://openjdk.org/projects/jigsaw/spec/reqs/02#version-selection) değildir; bu sorunu inşa-araçları (*build tools*) ve konteyner (*container*) uygulamalarına bırakmak en iyisidir.

Modül deklarasyonu birkaç nedenden dolayı bir dil veya kendi notasyonlarından ziyade Java programlama dilinin bir parçasıdır. En önemlilerinden biri, [fazlar arasında aslına uygunluğu](https://openjdk.org/projects/jigsaw/spec/reqs/02#fidelity-across-all-phases) (*fidelity across phases*) sağlamak için modül bilgilerinin hem derleme zamanında hem de çalışma zamanında mevcut olması gerektiğidir, örneğin, modül sisteminin hem derleme zamanında hem de çalışma zamanında aynı şekilde çalışmasını sağlamak. Bu da, teşhis edilmesi ve onarılması daha kolay olduğunda birçok hata türünün önlenmesine veya en azından - derleme zamanında - daha erken bildirilmesine olanak tanır.

Modül deklarasyonlarının, bir modüldeki diğer kaynak dosyalarıyla (*source files*) birlikte Java sanal makinesi tarafından tüketilmek üzere bir sınıf dosyası (*class file*) halinde derlenen bir kaynak dosyada (*source file*) ifade edilmesi, aslına uygunluğu (*fidelity*) sağlamanın doğal yoludur. Bu yaklaşım geliştiricilere hemen tanıdık gelecektir ve IDE'ler ve inşa araçları (*build tools*) tarafından desteklenmesi zor olmayacaktır. Özellikle bir IDE, bileşenin proje açıklamasında zaten mevcut olan bilgilerden `requires` cümleleri (*requires clauses*) sentezleyerek mevcut bir bileşen için bir başlangıç modül (*initial module*) deklarasyonu önerebilir.

Modül deklarasyonlarının, bir modüldeki diğer kaynak dosyalarla (*source files*) birlikte, Java sanal makinesinin tüketimi için bir sınıf dosyasına (*class file*) derlenen bir kaynak dosyada (*source file*) ifade edilmesi, aslına uygunluğu (*fidelity*) sağlamanın doğal yoludur. Bu yaklaşım geliştiricilere hemen tanıdık gelecek, ve IDE'ler ve inşa araçları (*build tools*) tarafından desteklenmesi zor olmayacaktır. Özellikle bir IDE, bileşenin proje açıklamasında zaten mevcut olan bilgilerden `requires` cümlecikleri (*requires clauses*) sentezleyerek mevcut bir bileşen için bir başlangıç modül (*initial module*) deklarasyonu önerebilir.

### 1.2 Module artifacts (modül yapıları/yapıtları/artifektler)

Expand Down
18 changes: 18 additions & 0 deletions _sass/minimal-mistakes/skins/_default.scss
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,21 @@
========================================================================== */

// Intentionally left blank
/* solarized light syntax highlighting (base16) */
$base00: #fafafa !default;
$base01: #073642 !default;
$base02: #586e75 !default;
$base03: #657b83 !default;
$base04: #839496 !default;
$base05: #586e75 !default;
$base06: #eee8d5 !default;
$base07: #fdf6e3 !default;
$base08: #dc322f !default;
$base09: #cb4b16 !default;
$base0a: #b58900 !default;
$base0b: #859900 !default;
$base0c: #2aa198 !default;
$base0d: #268bd2 !default;
$base0e: #6c71c4 !default;
$base0f: #d33682 !default;
// https://mmistakes.github.io/minimal-mistakes/docs/stylesheets/#syntax-highlighting ---> _sass:minimal-mistakes:skins:_default.scss dosyasına ya da main.scss dosyasına eklenebilir.
19 changes: 0 additions & 19 deletions assets/css/main.scss
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,6 @@ search: false

@charset "utf-8";

/* solarized light syntax highlighting (base16) */
$base00: #fafafa !default;
$base01: #073642 !default;
$base02: #586e75 !default;
$base03: #657b83 !default;
$base04: #839496 !default;
$base05: #586e75 !default;
$base06: #eee8d5 !default;
$base07: #fdf6e3 !default;
$base08: #dc322f !default;
$base09: #cb4b16 !default;
$base0a: #b58900 !default;
$base0b: #859900 !default;
$base0c: #2aa198 !default;
$base0d: #268bd2 !default;
$base0e: #6c71c4 !default;
$base0f: #d33682 !default;
// https://mmistakes.github.io/minimal-mistakes/docs/stylesheets/#syntax-highlighting ---> _sass:minimal-mistakes:skins:_default.scss dosyasına da eklenebilirdi.

@import "minimal-mistakes/skins/{{ site.minimal_mistakes_skin | default: 'default' }}"; // skin
@import "minimal-mistakes"; // main partials

Expand Down

0 comments on commit 2747f16

Please sign in to comment.