-
-
Notifications
You must be signed in to change notification settings - Fork 26.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
translation: Added Urdu Translation (#2564)
* Add Urdu Translation for main README.md file * added bullets point * docs: add translaction for abstract-document pattern in urdu (ibrahim89 #2563) * refactor - ur main README.md file updated (ibrahim89 #2563) * docs: add translaction for abstract-document pattern in urdu (ibrahim89 * translaction - added for active-object (ibrahim #2563) * Translation: added for urdu acyclic-visitor (ibrahim89 #2563) * Refactor: translation issue for ur * Refactor: alignment issue for acylic visitor pattern (ibrahim89 #2563)
- Loading branch information
Showing
5 changed files
with
756 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
<!-- the line below needs to be an empty line C: (its because kramdown isnt | ||
that smart and dearly wants an empty line before a heading to be able to | ||
display it as such, e.g. website) --> | ||
|
||
# جاوا میں لاگو ڈیزائن پیٹرن | ||
|
||
![Java CI](https://github.com/iluwatar/java-design-patterns/workflows/Java%20CI/badge.svg) | ||
[![License MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/iluwatar/java-design-patterns/master/LICENSE.md) | ||
[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=iluwatar_java-design-patterns&metric=ncloc)](https://sonarcloud.io/dashboard?id=iluwatar_java-design-patterns) | ||
[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=iluwatar_java-design-patterns&metric=coverage)](https://sonarcloud.io/dashboard?id=iluwatar_java-design-patterns) | ||
[![Join the chat at https://gitter.im/iluwatar/java-design-patterns](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/iluwatar/java-design-patterns?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) | ||
|
||
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --> | ||
|
||
[![All Contributors](https://img.shields.io/badge/all_contributors-213-orange.svg?style=flat-square)](#contributors-) | ||
|
||
<!-- ALL-CONTRIBUTORS-BADGE:END --> | ||
|
||
# تعارف | ||
|
||
ڈیزائن پیٹرن بہترین، باضابطہ طریقے ہیں جو ایک پروگرامر ایپلی کیشن یا سسٹم کو ڈیزائن کرتے وقت عام مسائل کو حل کرنے کے لیے استعمال کر سکتا ہے۔ | ||
|
||
ڈیزائن کے نمونے آزمائشی، ثابت شدہ ترقیاتی نمونے فراہم کرکے ترقی کے عمل کو تیز کر سکتے ہیں۔ | ||
|
||
ڈیزائن کے نمونوں کو دوبارہ استعمال کرنے سے ان لطیف مسائل کو روکنے میں مدد ملتی ہے جو بڑے مسائل کا باعث بنتے ہیں، اور یہ کوڈرز اور معماروں کے لیے کوڈ پڑھنے کی اہلیت کو بھی بہتر بناتا ہے جو پیٹرن سے واقف ہیں۔ | ||
|
||
# شروع کرتے ہیں | ||
|
||
یہ سائٹ جاوا ڈیزائن پیٹرنز کی نمائش کرتی ہے۔ حل اوپن سورس کمیونٹی کے تجربہ کار پروگرامرز اور آرکیٹیکٹس کے ذریعہ تیار کیے گئے ہیں۔ پیٹرن کو ان کی اعلیٰ سطحی وضاحت یا ان کے سورس کوڈ کو دیکھ کر براؤز کیا جا سکتا ہے۔ سورس کوڈ کی مثالوں پر اچھی طرح تبصرہ کیا گیا ہے اور ان کو پروگرامنگ ٹیوٹوریل کے طور پر سوچا جا سکتا ہے کہ کسی مخصوص پیٹرن کو کیسے نافذ کیا جائے۔ ہم سب سے مشہور جنگ سے ثابت شدہ اوپن سورس جاوا ٹیکنالوجیز استعمال کرتے ہیں۔ | ||
|
||
مواد میں غوطہ لگانے سے پہلے، آپ کو مختلف اصولوں سے واقف ہونا چاہیے۔ | ||
|
||
[سافٹ ویئر ڈیزائن کے اصول](https://java-design-patterns.com/patterns/) | ||
|
||
تمام ڈیزائن ممکنہ حد تک آسان ہونے چاہئیں۔ | ||
|
||
آپ کو KISS، YAGNI، اور سب سے آسان کام کرنا چاہیے جو ممکنہ طور پر اصولوں پر کام کر سکے۔ | ||
|
||
پیچیدگی اور نمونوں کو صرف اس وقت متعارف کرایا جانا چاہئے جب ان کی عملی توسیع کے لئے ضرورت ہو۔ | ||
|
||
ایک بار جب آپ ان تصورات سے واقف ہو جائیں تو آپ مندرجہ ذیل طریقوں میں سے کسی کے [دستیاب ڈیزائن پیٹرن](https://java-design-patterns.com/patterns/) کے نمونوں میں ڈرلنگ شروع کر سکتے ہیں۔ | ||
|
||
⚪ نام سے مخصوص پیٹرن تلاش کریں۔ ایک نہیں مل سکتا؟ براہ کرم ایک نئے پیٹرن کی اطلاع دیں۔ [یہاں](https://github.com/iluwatar/java-design-patterns/issues). | ||
|
||
⚪ کارکردگی'، 'گینگ آف فور' یا 'ڈیٹا تک رسائی' جیسے ٹیگز کا استعمال۔ | ||
|
||
⚪ پیٹرن کے زمرے استعمال کرنا، 'تخلیقی'، 'رویے'، اور دیگر۔ | ||
|
||
امید ہے کہ، آپ کو اس سائٹ پر پیش کردہ آبجیکٹ پر مبنی حل کارآمد معلوم ہوں گے۔ | ||
اپنے فن تعمیرات میں اور ان کو سیکھنے میں اتنا ہی مزہ کریں جتنا ہم نے انہیں تیار کرتے وقت کیا تھا۔ | ||
|
||
# شراکت کیسے کریں | ||
|
||
اگر آپ پروجیکٹ میں حصہ ڈالنے کے لیے تیار ہیں تو آپ کو متعلقہ معلومات مل جائیں گی۔ | ||
ہمارے [ڈویلپر ویکی](https://github.com/iluwatar/java-design-patterns/wiki). ہم مدد کریں گے۔ آپ اور میں آپ کے سوالات کے جوابات [گیٹر چیٹ روم](https://gitter.im/iluwatar/java-design-patterns). | ||
|
||
|
||
# لائسنس | ||
|
||
یہ پروجیکٹ MIT لائسنس کی شرائط کے تحت لائسنس یافتہ ہے۔ | ||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,176 @@ | ||
--- | ||
title: Abstract Document | ||
category: Structural | ||
language: ur | ||
tag: | ||
- Extensibility | ||
--- | ||
|
||
## ارادہ | ||
|
||
متحرک خصوصیات کا استعمال کریں اور ٹائپ سیفٹی کو برقرار رکھتے ہوئے غیر ٹائپ شدہ زبانوں کی لچک حاصل کریں۔ | ||
|
||
## وضاحت | ||
|
||
خلاصہ دستاویز کا پیٹرن اضافی، غیر جامد خصوصیات کو سنبھالنے کے قابل بناتا ہے۔ یہ پیٹرن قسم کی حفاظت اور مختلف کلاسوں کی الگ الگ خصوصیات کو انٹرفیس کے سیٹ میں فعال کرنے کے لیے خصلتوں کے تصور کا استعمال کرتا ہے۔ | ||
|
||
حقیقی مثال | ||
|
||
> ایک ایسی کار پر غور کریں جو متعدد حصوں پر مشتمل ہو۔ تاہم ہم نہیں جانتے کہ آیا مخصوص کار میں واقعی تمام پرزے ہیں یا ان میں سے کچھ ۔ ہماری کاریں متحرک اور انتہائی لچکدار ہیں۔ | ||
صاف لفظوں میں | ||
|
||
> خلاصہ دستاویز کا پیٹرن اشیاء کے بارے میں جانے بغیر خصوصیات کو منسلک کرنے کی اجازت دیتا ہے۔ | ||
ویکیپیڈیا کہتا ہے۔ | ||
|
||
> ڈھیلے ٹائپ شدہ کلیدی قدر والے اسٹورز میں اشیاء کو منظم کرنے اور ٹائپ شدہ نظاروں کا استعمال کرتے ہوئے ڈیٹا کو ظاہر کرنے کے لیے آبجیکٹ پر مبنی ساختی ڈیزائن کا نمونہ۔ پیٹرن کا مقصد اجزاء کے درمیان اعلی درجے کی لچک حاصل کرنا ہے۔ | ||
سختی سے ٹائپ کی گئی زبان میں جہاں قسم کی حفاظت کی حمایت کو کھونے کے بغیر، فلائی پر آبجیکٹ ٹری میں نئی خصوصیات شامل کی جا سکتی ہیں۔پیٹرن کلاس کی مختلف خصوصیات کو مختلف انٹرفیس میں الگ کرنے کے لیے خصلتوں کا استعمال کرتا ہے۔ | ||
|
||
**پروگرامی مثال** | ||
|
||
آئیے پہلے بیس کلاسز `Document` اور `AbstractDocument` کی وضاحت کرتے ہیں۔ | ||
وہ بنیادی طور پر آبجیکٹ کو پراپرٹی کا نقشہ اور کسی بھی مقدار میں چائلڈ آبجیکٹ رکھتے ہیں۔ | ||
|
||
```java | ||
public interface Document { | ||
|
||
Void put(String key, Object value); | ||
|
||
Object get(String key); | ||
|
||
<T> Stream<T> children(String key, Function<Map<String, Object>, T> constructor); | ||
} | ||
|
||
public abstract class AbstractDocument implements Document { | ||
|
||
private final Map<String, Object> properties; | ||
|
||
protected AbstractDocument(Map<String, Object> properties) { | ||
Objects.requireNonNull(properties, "properties map is required"); | ||
this.properties = properties; | ||
} | ||
|
||
@Override | ||
public Void put(String key, Object value) { | ||
properties.put(key, value); | ||
return null; | ||
} | ||
|
||
@Override | ||
public Object get(String key) { | ||
return properties.get(key); | ||
} | ||
|
||
@Override | ||
public <T> Stream<T> children(String key, Function<Map<String, Object>, T> constructor) { | ||
return Stream.ofNullable(get(key)) | ||
.filter(Objects::nonNull) | ||
.map(el -> (List<Map<String, Object>>) el) | ||
.findAny() | ||
.stream() | ||
.flatMap(Collection::stream) | ||
.map(constructor); | ||
} | ||
... | ||
} | ||
``` | ||
اس کے بعد ہم ایک enum `Property` اور type, price, model اور parts کے لئے انٹرفیس کا ایک سیٹ بیان کرتے ہیں۔ یہ ہمیں تخلیق کرنے کی اجازت دیتا ہے۔ | ||
ہماری `Car` کلاس میں جامد نظر آنے والا انٹرفیس۔ | ||
|
||
```java | ||
public enum Property { | ||
|
||
PARTS, TYPE, PRICE, MODEL | ||
} | ||
|
||
public interface HasType extends Document { | ||
|
||
default Optional<String> getType() { | ||
return Optional.ofNullable((String) get(Property.TYPE.toString())); | ||
} | ||
} | ||
|
||
public interface HasPrice extends Document { | ||
|
||
default Optional<Number> getPrice() { | ||
return Optional.ofNullable((Number) get(Property.PRICE.toString())); | ||
} | ||
} | ||
public interface HasModel extends Document { | ||
|
||
default Optional<String> getModel() { | ||
return Optional.ofNullable((String) get(Property.MODEL.toString())); | ||
} | ||
} | ||
|
||
public interface HasParts extends Document { | ||
|
||
default Stream<Part> getParts() { | ||
return children(Property.PARTS.toString(), Part::new); | ||
} | ||
} | ||
``` | ||
اب ہم 'کار' متعارف کرانے کے لیے تیار ہیں۔ | ||
|
||
```java | ||
public class Car extends AbstractDocument implements HasModel, HasPrice, HasParts { | ||
|
||
public Car(Map<String, Object> properties) { | ||
super(properties); | ||
} | ||
} | ||
``` | ||
|
||
اور آخر کار یہ ہے کہ ہم ایک مکمل مثال میں 'کار' کو کیسے بناتے اور استعمال کرتے ہیں۔ | ||
|
||
```java | ||
LOGGER.info("Constructing parts and car"); | ||
|
||
var wheelProperties = Map.of( | ||
Property.TYPE.toString(), "wheel", | ||
Property.MODEL.toString(), "15C", | ||
Property.PRICE.toString(), 100L); | ||
|
||
var doorProperties = Map.of( | ||
Property.TYPE.toString(), "door", | ||
Property.MODEL.toString(), "Lambo", | ||
Property.PRICE.toString(), 300L); | ||
|
||
var carProperties = Map.of( | ||
Property.MODEL.toString(), "300SL", | ||
Property.PRICE.toString(), 10000L, | ||
Property.PARTS.toString(), List.of(wheelProperties, doorProperties)); | ||
|
||
var car = new Car(carProperties); | ||
|
||
LOGGER.info("Here is our car:"); | ||
LOGGER.info("-> model: {}", car.getModel().orElseThrow()); | ||
LOGGER.info("-> price: {}", car.getPrice().orElseThrow()); | ||
LOGGER.info("-> parts: "); | ||
car.getParts().forEach(p -> LOGGER.info("\t{}/{}/{}", | ||
p.getType().orElse(null), | ||
p.getModel().orElse(null), | ||
p.getPrice().orElse(null)) | ||
); | ||
|
||
|
||
``` | ||
|
||
## کلاس ڈایاگرام | ||
|
||
![alt text](./etc/abstract-document.png "Abstract Document Traits and Domain") | ||
|
||
## استعمال | ||
|
||
خلاصہ دستاویز کا پیٹرن استعمال کریں جب - | ||
|
||
* نئ پراپرٹیز آن دی فلائی شامل کرنے کی ضرورت ہے۔ | ||
* آپ ڈھانچے جیسے درخت میں ڈومین کو منظم کرنے کا ایک لچکدار طریقہ چاہتے ہیں۔ | ||
* آپ کو زیادہ ڈھیلا ڈھالا نظام چاہتے ہیں۔ | ||
|
||
## کریڈٹ | ||
|
||
* [Wikipedia: Abstract Document Pattern](https://en.wikipedia.org/wiki/Abstract_Document_Pattern) | ||
* [Martin Fowler: Dealing with properties](http://martinfowler.com/apsupp/properties.pdf) | ||
* [Pattern-Oriented Software Architecture Volume 4: A Pattern Language for Distributed Computing (v. 4)](https://www.amazon.com/gp/product/0470059028/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=javadesignpat-20&creative=9325&linkCode=as2&creativeASIN=0470059028&linkId=e3aacaea7017258acf184f9f3283b492) |
Oops, something went wrong.