لقد تم التواصل مع الإدارة وان شاء الله يقومون بحل المشكلة.
تصور مثلا الرياض المالية او دراية المالية (ضمنيا InteractiveBrokers) بالنسبة لك كمبرمج جافا, هناك كلاسات كثيرة أيضا مثل دوكاسكوبي, وظهر لك مثلا فوق 100 دالة او فيلدز؟ غير مرتبة ابجديا, وانت تبحث تحديدا عن امر محدد مثلا دالة placeOrder ؟ لتعرف كم لها بناء واين توجد الخ؟
نريد تعديل البرنامج الخطير بحيث يكون الترتيب ابجدي (للنصوص) او مرتب (للارقام من الأكبر للاصغر او العكس) -- فيسهل البحث عليك ويقل الوقت المفقود من حياتك.
تأمل الصورة: من ضمن 104 عنصر--ظهرت برقم 36 وانظر فوقها وتحتها لايوجد ترتيب ابجدي!
وبنا عليه اجهاد ذهني ونظارة سميكة!
وهنا نتحدث عن الرياض المالية كمثال للجافا سورتنق ليس الا
صورة:
الملف المرفق 521359
ومن هذه اللحظة ولاحقا الجافا رفلكشن التي سميناها الخبير الخطير سيكون اسمها نِم-كلاس NymClass
احفظه هذه المرة كجافا خارج محرر منصة دوكسكوبي--يعني ننسخ الكود ذا العلاقة ونضعه في دالة MAIN
انسخه من اسفل وليكن معك طوال عمرك لاهميه وسمه NymClass
كود:import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class NymClass {
public static void main(String[] args)
{
String searchThisClass="java.lang.System";
try
{
Class<?> c=Class.forName(searchThisClass);
System.out.println("Constructors........");
Constructor<?> con[]=c.getDeclaredConstructors();
for(int i=0;i<con.length;i++) {
String ac=String.valueOf(i+1);
if(i+1>99)
ac=String.valueOf(i+1);
else if(i+1>9)
ac="0"+ac;
else
ac="00"+ac;
String x=""+con[i];
String y=x.substring(x.indexOf(searchThisClass));
String z=x.substring(0,x.indexOf(searchThisClass));
System.out.println((ac)+"-----"+y+" "+z);}
System.out.println("Fields........");
Field f[]=c.getDeclaredFields();
for(int i=0;i<f.length;i++) {
String ac=String.valueOf(i+1);
if(i+1>99)
ac=String.valueOf(i+1);
else if(i+1>9)
ac="0"+ac;
else
ac="00"+ac;
String x=""+f[i];
String y=x.substring(x.indexOf(searchThisClass));
String z=x.substring(0,x.indexOf(searchThisClass));
System.out.println((ac)+"-----"+y+" "+z);}
System.out.println("Methods........");
Method m[]=c.getDeclaredMethods();
for(int i=0;i<m.length;i++) {
String ac=String.valueOf(i+1);
if(i+1>99)
ac=String.valueOf(i+1);
else if(i+1>9)
ac="0"+ac;
else
ac="00"+ac;
String x=""+m[i];
String y=x.substring(x.indexOf(searchThisClass));
String z=x.substring(0,x.indexOf(searchThisClass));
System.out.println((ac)+"-----"+y+" "+z);}
}
catch (Throwable e)
{
System.out.println(e);
}
}
}
لا ان شاء الله ما في احباط، استمر يا ملك سلمان،
رغم أني حاليا لست مهتما بهذه اللغة لكن قد نستفيد يوما ما من هذا الشرح الجميل أوقد يستفيد منه من يحب تعلم هذة اللغة،سوف اقترح عليك اقتراح وهو ان تقوم بعمل الشرح ايضا على شكل ملف بي دي أف وان تجعله منظما اكثر حيث تبداء من الأساسيات وبتدرج خطوة خطوة بارك الله فيك اخي الكريم وفي علمك…
بي دي اف او فيديو الخ---مستحيل اخي سمير, لاتناسب شخصيتي
منتديات فقط وكتابة
===============
في الكود أعلاه بحثنا عن كلاس System
المتغير هذا, تضع القيمة أي شيء اخر غير سستم وتحرص على سلامته كنص وانه يوجد في الجافا API
انظر للسطر الوحيد في البرنامج الذي تغير فيه:
كود:String searchThisClass="java.lang.System";
تأمل كيف تعرض؟؟
صورة:
الملف المرفق 521360
كأنها والعدم سواء لمن قد تجاوز مستوى API لو كان العدد كبيرا للفيلدز او الدوال!
من يرد الكود في الرد 318 هكذا دون حرص على الترتيب فلينسخه
من يريد الترتيب فليتريث ومنها نتعلم السورتنق للبيانات مع الجافا كولكشن.
لاحظ البيانات هنا مصفوفة نصوص -- كل سطر فوق تشوفه عبارة عن عنصر من حزمة البيانات
في صور اول أسبوع كان هناك صورة شجرية لـ Set واعتقد وصورة لـ List
وقلنا List انترفيس بينما تابعها ArrayList كلاس
ولأن الأمر كذلك, List تستخدم فقط للتعريف-لأنها انترفيس وليست كلاس- وبالتالي لايمكن ان تستخدم للانشاء "انشاء او خلق كائن جديد"
مبادئ جافا: الكلاسات فقط تستخدم لانشاء الكائنات "المتغيرات الشيئية"
اذن ArrayList تستخدم للانشاء-- نعيد ليش؟ ج: لانها كلاس
لأنها تنفذ او من توابع الانترفيس List --اذن هي مناسبة لخلق كائنات من نوع List
صورة:
الملف المرفق 521366
كلمة new ثم اسم الكلاس ArrayList هي وسيلة انشاء كائن جديد
في الصورة أعلاه انشأنا ثلاث كائنات وهي:
list_fields ---- list_Constr------list_Methods
يعني كأن الله رزقك 3 أطفال وسميتهم بهذه الاسماء
ونوع قيم عناصر اللستة أعلاه التي سنتعامل معها هي من نوع String ---- البيانات في الأخير أيا كانت تنتهي الى الأنواع الأساسية الشهيرة مثل String - Integer الخ
فنحن سنطبع نصوص عبارة عن تلك الدوال او الفيلدز او الكوسنتركتور--نص نقرأه امامنا بكل مافيه.
قيمة نصية "String"
حاجة زي كذا يعني:
الملف المرفق 521368
اذن الخطوة الأولى انشأنا 3 كائنات, كائن لكل مجال او عنوان رئيسي
لدينا 3 عناوين او مجالات رئيسية: (Constructor-Fields-Methods) -- وهذه الثلاثة هي قلب أي class
الكود-الكشاف--سورتنق وحذف التفاصيل--ترتيب ابجديكود:import java.lang.reflect.*;
import java.util.*;
public class Nym9Class {
public static void main(String[] args)
{
String searchThisClass="java.lang.System";
System.out.println("Our selection: "+searchThisClass);
try
{
Class<?> c=Class.forName(searchThisClass);
List<String> s = new ArrayList<String>();
List<String> s1 = new ArrayList<String>();
List<String> s2 = new ArrayList<String>();
for(Constructor<?> i: c.getDeclaredConstructors()) s.add(i.toString());
Collections.sort(s);
for(String i: s)
{
String y=i.substring(i.indexOf(searchThisClass));
s1.add(y);
}
for(String i: s1)
{
try {
String x1=i.substring(i.indexOf(" "));
String y=x1.substring(x1.indexOf(searchThisClass));
s2.add(y);
}
catch (Throwable e)
{
s2.add(i);
}
}
Collections.sort(s2);
System.out.println("-----------------------------------------\nConstructors(Sorted)\n-----------------------------------------");
for(String i:s2) {
int j=(s2.indexOf(i)+1);
String ac=String.valueOf(j);
if(j>99)
ac=String.valueOf(j);
else if(j>9)
ac="0"+ac;
else
ac="00"+ac;
System.out.println("-"+ac+"-"+i);}
}
catch (Throwable e)
{
System.out.println(e);
}
try
{
Class<?> c=Class.forName(searchThisClass);
List<String> s = new ArrayList<String>();
List<String> s1 = new ArrayList<String>();
List<String> s2 = new ArrayList<String>();
for(Field i: c.getDeclaredFields()) s.add(i.toString());
Collections.sort(s);
for(String i: s)
{
String y=i.substring(i.indexOf(searchThisClass));
s1.add(y);
}
for(String i: s1)
{
try {
String x1=i.substring(i.indexOf(" "));
String y=x1.substring(x1.indexOf(searchThisClass));
s2.add(y);
}
catch (Throwable e)
{
s2.add(i);
}
}
Collections.sort(s2);
System.out.println("-----------------------------------------\nFields(Sorted)\n-----------------------------------------");
for(String i:s2) {
int j=(s2.indexOf(i)+1);
String ac=String.valueOf(j);
if(j>99)
ac=String.valueOf(j);
else if(j>9)
ac="0"+ac;
else
ac="00"+ac;
System.out.println("-"+ac+"-"+i);}
}
catch (Throwable e)
{
System.out.println(e);
}
try
{
Class<?> c=Class.forName(searchThisClass);
List<String> s = new ArrayList<String>();
List<String> s1 = new ArrayList<String>();
List<String> s2 = new ArrayList<String>();
for(Method i: c.getDeclaredMethods()) s.add(i.toString());
Collections.sort(s);
for(String i: s)
{
String y=i.substring(i.indexOf(searchThisClass));
s1.add(y);
}
for(String i: s1)
{
try {
String x1=i.substring(i.indexOf(" "));
String y=x1.substring(x1.indexOf(searchThisClass));
s2.add(y);
}
catch (Throwable e)
{
s2.add(i);
}
}
Collections.sort(s2);
System.out.println("-----------------------------------------\nMethods(Sorted)\n-----------------------------------------");
for(String i:s2) {
int j=(s2.indexOf(i)+1);
String ac=String.valueOf(j);
if(j>99)
ac=String.valueOf(j);
else if(j>9)
ac="0"+ac;
else
ac="00"+ac;
System.out.println("-"+ac+"-"+i);}
}
catch (Throwable e)
{
System.out.println(e);
}
}
}
يعرض شيء كما في الصورة لو اخترت البحث عن System الموجودة في lang االموجودة في java
صورة:
الملف المرفق 521370
الان للجافا البحتة او للجافا مع دوكاسكوبي او للجافا مع انتراكتيف بروكز (الرياض او دراية المالية) ممكن تغوص في التفاصيل المتاحة التي تحتاجها للتداول الالي مع هذه الشركات.
اذا كنت تتداول بلغة C# او بايثون الخ--لامشكلة ولكن هذا الكود الجافوي تحتاجه لمعرفة الدوال
دوال التداول هي كما هي أيا كانت لغة البرمجة طالما مصدرها وسيط واحد مثل انتراكتيف بروكرز التي تسمح بعدة لغات برمجية (خمس لغات)
عندما تضع مكتبة انتراكتيف بوركز او دوكاسكوبي مع ECLIPSE وقتها قد تستطيع استخدامه لاستكشاف كلاساتهم وتفاصيلها
والاعلى للفليدز و الميثودز والكوسنتركتور
ممكن أيضا الانترفيسس والبكجز الخ
interfaces-packages-annotations الخ !!!
يعني أي عناون رئيسي ممكن يكون في برامج الجافا--يمكن استكشافه
انظر للصورة اسفل: زعبلة! ومتاهة!
خصوصا عندما تغوص في أي انترفيس او أي كلاس
وهنا تبرز أهمية ال JavaReflection -- عنوان رئيسي في الجافا وهو اول شيء يجب ان تتعلمه اذا تريد الجافا للتداول الالكتروني, (بعد تعلم اساسيات الجافا)
الملف المرفق 521371
ولمعرفة العدد سلفا لكل عنوان اضف السطر التالي على الكود السابق:
مكان الإضافة توضحه الصورة اسفل:كود:try
{
Class<?> cc = Class.forName(searchThisClass);
Constructor<?>[] con = cc.getDeclaredConstructors();
Method[] mtd = cc.getDeclaredMethods();
Field[] fld = cc.getDeclaredFields();
System.out.println("Our selection: "+searchThisClass+"\nConstructors: "+con.length+"\nFields: "+fld.length+"\nMethods: "+mtd.length);
} catch (ClassNotFoundException e1)
{
e1.printStackTrace();
}
الملف المرفق 521374