النتائج 1 إلى 11 من 11
  1. #1
    الصورة الرمزية sal_moh85
    sal_moh85 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Apr 2016
    الإقامة
    الإمارات العربية المتحدة
    العمر
    38
    المشاركات
    125

    افتراضي هل يوجد طريقة تحويل من Java الىmql4

    سلام عليكم اخوا المبرمجين
    هل يوجد طريقه لي تحويل كود من Java الى mql4 وشكرا جزيلا

  2. #2
    تاريخ التسجيل
    Jul 2011
    الإقامة
    السعودية
    المشاركات
    11,147

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة sal_moh85 مشاهدة المشاركة
    سلام عليكم اخوا المبرمجين
    هل يوجد طريقه لي تحويل كود من Java الى mql4 وشكرا جزيلا
    اتوقع سهل اعادة البرمجة

    اطرح كود الجافا هنا

  3. #3
    الصورة الرمزية sal_moh85
    sal_moh85 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Apr 2016
    الإقامة
    الإمارات العربية المتحدة
    العمر
    38
    المشاركات
    125

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة فيلسوف البادية مشاهدة المشاركة
    اتوقع سهل اعادة البرمجة

    اطرح كود الجافا هنا
    مشكور اخ فيلسوف الباديه
    هاد الكود
    كود PHP:
    package com.dukascopy.visualforex.visualjforex;

    import java.util.*;
    import com.dukascopy.api.*;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.concurrent.CopyOnWriteArrayList;
    import java.lang.reflect.*;
    import java.math.BigDecimal;


    /*
     * Created by VisualJForex Generator, version 2.40
     * Date: 19.11.2017 09:12
     */
    public class ArticleContestApril implements IStrategy {

        private 
    CopyOnWriteArrayList<TradeEventActiontradeEventActions = new CopyOnWriteArrayList<TradeEventAction>();
        private static final 
    String DATE_FORMAT_NOW "yyyyMMdd_HHmmss";
        private 
    IEngine engine;
        private 
    IConsole console;
        private 
    IHistory history;
        private 
    IContext context;
        private 
    IIndicators indicators;
        private 
    IUserInterface userInterface;

        @
    Configurable("defaultTakeProfit:")
        public 
    int defaultTakeProfit;
        @
    Configurable("defaultInstrument:")
        public 
    Instrument defaultInstrument Instrument.EURUSD;
        @
    Configurable("defaultSlippage:")
        public 
    int defaultSlippage 5;
        @
    Configurable("defaultTradeAmount:")
        public 
    double defaultTradeAmount;
        @
    Configurable("defaultStopLoss:")
        public 
    int defaultStopLoss 25;
        @
    Configurable("defaultPeriod:")
        public 
    Period defaultPeriod Period.TEN_MINS;

        private 
    Candle LastBidCandle =  null ;
        private 
    String AccountId "";
        private 
    double _ATR20DayPips;
        private 
    IOrder _currentPosition =  null ;
        private 
    double Equity;
        private 
    int _traillingStep 15;
        private 
    Tick LastTick =  null ;
        private 
    int _traillingTrigger;
        private 
    String AccountCurrency "";
        private 
    int OverWeekendEndLeverage;
        private 
    double Leverage;
        private 
    double _dynamicLots 1.0E-6;
        private List<
    IOrderPendingPositions =  null ;
        private List<
    IOrderOpenPositions =  null ;
        private 
    double _atr20DayPips;
        private 
    double UseofLeverage;
        private 
    IMessage LastTradeEvent =  null ;
        private 
    boolean GlobalAccount;
        private 
    int _stopLoss 10;
        private 
    double _atr20Day;
        private 
    Candle LastAskCandle =  null ;
        private 
    int MarginCutLevel;
        private List<
    IOrderAllPositions =  null ;


        public 
    void onStart(IContext contextthrows JFException {
            
    this.engine context.getEngine();
            
    this.console context.getConsole();
            
    this.history context.getHistory();
            
    this.context context;
            
    this.indicators context.getIndicators();
            
    this.userInterface context.getUserInterface();

            
    subscriptionInstrumentCheck(defaultInstrument);

            
    ITick lastITick context.getHistory().getLastTick(defaultInstrument);
            
    LastTick = new Tick(lastITickdefaultInstrument);

            
    IBar bidBar context.getHistory().getBar(defaultInstrumentdefaultPeriodOfferSide.BID1);
            
    IBar askBar context.getHistory().getBar(defaultInstrumentdefaultPeriodOfferSide.ASK1);
            
    LastAskCandle = new Candle(askBardefaultPerioddefaultInstrumentOfferSide.ASK);
            
    LastBidCandle = new Candle(bidBardefaultPerioddefaultInstrumentOfferSide.BID);

            if (
    indicators.getIndicator("ATR") == null) {
                
    indicators.registerDownloadableIndicator("1305","ATR");
            }
            
    subscriptionInstrumentCheck(Instrument.fromString("EUR/USD"));

        }

        public 
    void onAccount(IAccount accountthrows JFException {
            
    AccountCurrency account.getCurrency().toString();
            
    Leverage account.getLeverage();
            
    AccountIdaccount.getAccountId();
            
    Equity account.getEquity();
            
    UseofLeverage account.getUseOfLeverage();
            
    OverWeekendEndLeverage account.getOverWeekEndLeverage();
            
    MarginCutLevel account.getMarginCutLevel();
            
    GlobalAccount account.isGlobal();
        }

        private 
    void updateVariables(Instrument instrument) {
            try {
                
    AllPositions engine.getOrders();
                List<
    IOrderlistMarket = new ArrayList<IOrder>();
                for (
    IOrder orderAllPositions) {
                    if (
    order.getState().equals(IOrder.State.FILLED)){
                        
    listMarket.add(order);
                    }
                }
                List<
    IOrderlistPending = new ArrayList<IOrder>();
                for (
    IOrder orderAllPositions) {
                    if (
    order.getState().equals(IOrder.State.OPENED)){
                        
    listPending.add(order);
                    }
                }
                
    OpenPositions listMarket;
                
    PendingPositions listPending;
            } catch(
    JFException e) {
                
    e.printStackTrace();
            }
        }

        public 
    void onMessage(IMessage messagethrows JFException {
            if (
    message.getOrder() != null) {
                
    updateVariables(message.getOrder().getInstrument());
                
    LastTradeEvent message;
                for (
    TradeEventAction event :  tradeEventActions) {
                    
    IOrder order message.getOrder();
                    if (
    order != null && event != null && message.getType().equals(event.getMessageType())&& order.getLabel().equals(event.getPositionLabel())) {
                        
    Method method;
                        try {
                            
    method this.getClass().getDeclaredMethod(event.getNextBlockId(), Integer.class);
                            
    method.invoke(this, new Integer[] {event.getFlowId()});
                        } catch (
    SecurityException e) {
                                
    e.printStackTrace();
                        } catch (
    NoSuchMethodException e) {
                              
    e.printStackTrace();
                        } catch (
    IllegalArgumentException e) {
                            
    e.printStackTrace();
                        } catch (
    IllegalAccessException e) {
                            
    e.printStackTrace();
                        } catch (
    InvocationTargetException e) {
                            
    e.printStackTrace();
                        } 
                        
    tradeEventActions.remove(event); 
                    }
                }   
                
    ATR_block_17(2);
            }
        }

        public 
    void onStop() throws JFException {
        }

        public 
    void onTick(Instrument instrumentITick tickthrows JFException {
            
    LastTick = new Tick(tickinstrument);
            
    updateVariables(instrument);

                
    ATR_block_17(0);

        }

        public 
    void onBar(Instrument instrumentPeriod periodIBar askBarIBar bidBarthrows JFException {
            
    LastAskCandle = new Candle(askBarperiodinstrumentOfferSide.ASK);
            
    LastBidCandle = new Candle(bidBarperiodinstrumentOfferSide.BID);
            
    updateVariables(instrument);
                
    ATR_block_17(1);

        }

        public 
    void subscriptionInstrumentCheck(Instrument instrument) {
            try {
                  if (!
    context.getSubscribedInstruments().contains(instrument)) {
                      
    Set<Instrumentinstruments = new HashSet<Instrument>();
                      
    instruments.add(instrument);
                      
    context.setSubscribedInstruments(instrumentstrue);
                      
    Thread.sleep(100);
                  }
              } catch (
    InterruptedException e) {
                  
    e.printStackTrace();
              }
            }

        public 
    double round(double priceInstrument instrument) {
            
    BigDecimal big = new BigDecimal("" price); 
            
    big big.setScale(instrument.getPipScale() + 1BigDecimal.ROUND_HALF_UP); 
            return 
    big.doubleValue(); 
        }

        public 
    ITick getLastTick(Instrument instrument) {
            try { 
                return (
    context.getHistory().getTick(instrument0)); 
            } catch (
    JFException e) { 
                 
    e.printStackTrace();  
             } 
             return 
    null
        }

        private  
    void If_block_11(Integer flow) {
            
    boolean argument_1 _currentPosition.isLong();
            
    boolean argument_2 true;
            if (
    argument_1!= argument_2) {
                
    Calculation_block_12(flow);
            }
            else if (
    argument_1 == argument_2) {
                
    Calculation_block_12(flow);
            }
        }

        private 
    void Calculation_block_12(Integer flow) {
            
    double argument_1 0.25;
            
    double argument_2 _atr20DayPips;
            
    _traillingTrigger = (int)(argument_1 argument_2);
            
    If_block_13(flow);
        }

        private  
    void If_block_13(Integer flow) {
            
    double argument_1 _currentPosition.getProfitLossInPips();
            
    int argument_2 _traillingTrigger;
            if (
    argument_1argument_2) {
            }
            else if (
    argument_1argument_2) {
                
    CustomTrailingStop_block_14(flow);
            }
            else if (
    argument_1== argument_2) {
            }
        }

        private  
    void CustomTrailingStop_block_14(Integer flow) {
            
    IOrder argument_1 _currentPosition;
            
    int argument_2 _traillingStep;
            
    int argument_3 _stopLoss;
            
    int TRAILINGCOEFFICIENT 3;

            
    Instrument selectedInstrument argument_1.getInstrument();
            
    int minStopPricePips;
            
    minStopPricePips = (argument_2 TRAILINGCOEFFICIENT) ? argument_2 TRAILINGCOEFFICIENT;
            try {
                
    double bid getLastTick(selectedInstrument).getBid();
                
    double ask getLastTick(selectedInstrument).getAsk();
                
    double trailingStopPrice minStopPricePips selectedInstrument.getPipValue();
                
    double stopLossPips argument_3 selectedInstrument.getPipValue();
                if ((
    context.getEngine() != null) &&  (argument_1.getState().equals(IOrder.State.OPENED) || argument_1.getState().equals(IOrder.State.FILLED))) {
                    if (
    argument_1.isLong()) {
                        if (
    argument_1.getStopLossPrice() > 0) {
                            if (
    bid >= (argument_1.getStopLossPrice() + (stopLossPips trailingStopPrice)) && (bid stopLossPips)!=argument_1.getStopLossPrice()) {
                                
    argument_1.setStopLossPrice(bid stopLossPips);
                            }
                        } else if (
    argument_1.getStopLossPrice() == 0) {
                            if (
    bid >= (argument_1.getOpenPrice() + trailingStopPrice) && (bid stopLossPips)!=argument_1.getStopLossPrice()) {
                                
    argument_1.setStopLossPrice(bid stopLossPips);
                            }
                        }
                    } else {
                        if (
    argument_1.getStopLossPrice() > 0) {
                            if (
    ask <= (argument_1.getStopLossPrice() - (stopLossPips trailingStopPrice))&& (ask stopLossPips)!=argument_1.getStopLossPrice()) {
                                
    argument_1.setStopLossPrice(ask stopLossPips);
                            }
                        } else if (
    argument_1.getStopLossPrice() == 0) {
                            if (
    ask <= (argument_1.getOpenPrice() - trailingStopPrice)&& (ask stopLossPips)!=argument_1.getStopLossPrice()) {
                                
    argument_1.setStopLossPrice(ask stopLossPips);
                            }
                        }
                    }
                }
                
    TradeEventAction event = new TradeEventAction();
                
    event.setMessageType(IMessage.Type.ORDER_CHANGED_OK);
                
    event.setNextBlockId("If_block_15");
                
    event.setPositionLabel(argument_1.getLabel());
                
    event.setFlowId(flow);
                
    tradeEventActions.add(event);
            } catch (
    JFException e) {
                
    e.printStackTrace();
            }
            
    If_block_15(flow);
        }

        private  
    void If_block_15(Integer flow) {
            
    int argument_1 PendingPositions.size();
            
    double argument_2 1.0;
            if (
    argument_1argument_2) {
            }
            else if (
    argument_1argument_2) {
                
    CloseandCancelPosition_block_16(flow);
            }
            else if (
    argument_1== argument_2) {
                
    CloseandCancelPosition_block_16(flow);
            }
        }

        private  
    void CloseandCancelPosition_block_16(Integer flow) {
            try {
                if (
    _currentPosition != null && (_currentPosition.getState() == IOrder.State.OPENED||_currentPosition.getState() == IOrder.State.FILLED)){
                    
    _currentPosition.close();
                }
            } catch (
    JFException e)  {
                
    e.printStackTrace();
            }
        }

        private 
    void ATR_block_17(Integer flow) {
            
    Instrument argument_1 defaultInstrument;
            
    Period argument_2 Period.DAILY;
            
    int argument_3 1;
            
    int argument_4 20;
            
    OfferSide[] offerside = new OfferSide[1];
            
    IIndicators.AppliedPrice[] appliedPrice = new IIndicators.AppliedPrice[1];
            
    offerside[0] = OfferSide.BID;
            
    appliedPrice[0] = IIndicators.AppliedPrice.CLOSE;
            
    Object[] params = new Object[1];
            
    params[0] = 20;
            try {
                
    subscriptionInstrumentCheck(argument_1);
                
    long time context.getHistory().getBar(argument_1argument_2OfferSide.BIDargument_3).getTime();
                
    Object[] indicatorResult context.getIndicators().calculateIndicator(argument_1argument_2offerside,
                        
    "ATR"appliedPriceparamsFilter.WEEKENDS1time0);
                if ((new 
    Double(((double [])indicatorResult[0])[0])) == null) {
                    
    this._atr20Day Double.NaN;
                } else { 
                    
    this._atr20Day = (((double [])indicatorResult[0])[0]);
                } 
            
    CalculationExpression_block_18(flow);
            } catch (
    JFException e) {
                
    e.printStackTrace();
                
    console.getErr().println(e);
                
    this._atr20Day Double.NaN;
            }
        }

        private 
    void CalculationExpression_block_18(Integer flow) {
            
    _atr20DayPips = (_atr20Day*10000)*2;
            
    If_block_22(flow);
        }

        private 
    void Calculation_block_19(Integer flow) {
            
    double argument_1 Equity;
            
    double argument_2 _dynamicLots;
            
    defaultTradeAmount argument_1 argument_2;
        }

        private  
    void PositionsViewer_block_20(Integer flow) {
            List<
    IOrderargument_1 AllPositions;
            for (
    IOrder order argument_1){
                if (
    order.getState() == IOrder.State.OPENED||order.getState() == IOrder.State.FILLED){
                    
    _currentPosition order;
                    
    If_block_21(flow);
                }
            }
        }

        private  
    void If_block_21(Integer flow) {
            
    int argument_1 OpenPositions.size();
            
    double argument_2 1.0;
            if (
    argument_1argument_2) {
            }
            else if (
    argument_1argument_2) {
            }
            else if (
    argument_1== argument_2) {
                
    If_block_11(flow);
            }
        }

        private  
    void If_block_22(Integer flow) {
            
    int argument_1 AllPositions.size();
            
    double argument_2 1.0;
            if (
    argument_1argument_2) {
                
    Calculation_block_19(flow);
            }
            else if (
    argument_1argument_2) {
                
    PositionsViewer_block_20(flow);
            }
            else if (
    argument_1== argument_2) {
                
    PositionsViewer_block_20(flow);
            }
        }

    class 
    Candle  {

        
    IBar bar;
        
    Period period;
        
    Instrument instrument;
        
    OfferSide offerSide;

        public 
    Candle(IBar barPeriod periodInstrument instrumentOfferSide offerSide) {
            
    this.bar bar;
            
    this.period period;
            
    this.instrument instrument;
            
    this.offerSide offerSide;
        }

        public 
    Period getPeriod() {
            return 
    period;
        }

        public 
    void setPeriod(Period period) {
            
    this.period period;
        }

        public 
    Instrument getInstrument() {
            return 
    instrument;
        }

        public 
    void setInstrument(Instrument instrument) {
            
    this.instrument instrument;
        }

        public 
    OfferSide getOfferSide() {
            return 
    offerSide;
        }

        public 
    void setOfferSide(OfferSide offerSide) {
            
    this.offerSide offerSide;
        }

        public 
    IBar getBar() {
            return 
    bar;
        }

        public 
    void setBar(IBar bar) {
            
    this.bar bar;
        }

        public 
    long getTime() {
            return 
    bar.getTime();
        }

        public 
    double getOpen() {
            return 
    bar.getOpen();
        }

        public 
    double getClose() {
            return 
    bar.getClose();
        }

        public 
    double getLow() {
            return 
    bar.getLow();
        }

        public 
    double getHigh() {
            return 
    bar.getHigh();
        }

        public 
    double getVolume() {
            return 
    bar.getVolume();
        }
    }
    class 
    Tick {

        private 
    ITick tick;
        private 
    Instrument instrument;

        public 
    Tick(ITick tickInstrument instrument){
            
    this.instrument instrument;
            
    this.tick tick;
        }

        public 
    Instrument getInstrument(){
           return  
    instrument;
        }

        public 
    double getAsk(){
           return  
    tick.getAsk();
        }

        public 
    double getBid(){
           return  
    tick.getBid();
        }

        public 
    double getAskVolume(){
           return  
    tick.getAskVolume();
        }

        public 
    double getBidVolume(){
            return 
    tick.getBidVolume();
        }

       public 
    long getTime(){
           return  
    tick.getTime();
        }

       public 
    ITick getTick(){
           return  
    tick;
        }
    }

        protected 
    String getLabel() {
            
    String label;
            
    label "IVF" getCurrentTime(LastTick.getTime()) + generateRandom(10000) + generateRandom(10000);
            return 
    label;
        }

        private 
    String getCurrentTime(long time) {
            
    SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
            return 
    sdf.format(time);
        }

        private static 
    String generateRandom(int n) {
            
    int randomNumber = (int) (Math.random() * n);
            
    String answer "" randomNumber;
            if (
    answer.length() > 3) {
                
    answer answer.substring(04);
            }
            return 
    answer;
        }

        class 
    TradeEventAction {
            private 
    IMessage.Type messageType;
            private 
    String nextBlockId "";
            private 
    String positionLabel "";
            private 
    int flowId 0;

            public 
    IMessage.Type getMessageType() {
                return 
    messageType;
            }

            public 
    void setMessageType(IMessage.Type messageType) {
                
    this.messageType messageType;
            }

            public 
    String getNextBlockId() {
                return 
    nextBlockId;
            }

            public 
    void setNextBlockId(String nextBlockId) {
                
    this.nextBlockId nextBlockId;
            }
            public 
    String getPositionLabel() {
                return 
    positionLabel;
           }

            public 
    void setPositionLabel(String positionLabel) {
                
    this.positionLabel positionLabel;
            }
            public 
    int getFlowId() {
                return 
    flowId;
            }
            public 
    void setFlowId(int flowId) {
                
    this.flowId flowId;
            }
        }


  4. #4
    تاريخ التسجيل
    Jul 2011
    الإقامة
    السعودية
    المشاركات
    11,147

    افتراضي

    محتاجة صفاء ذهن اخي
    وفهم هدف الكود كاملا
    منصة دوكاسكوبي JFOREX ؟؟

  5. #5
    تاريخ التسجيل
    Jul 2011
    الإقامة
    السعودية
    المشاركات
    11,147

    افتراضي

    اسرع حل بالنسبة لك هو ان تكون من خبرتك فاهم هدف البرنامج اعلاه وبالتالي اعادة برمجة لما تفهمه
    ولكن اي مبرمج هنا اذا هذه الامور ليست واضحة لك لابد يعود للمرجع:
    https://www.dukascopy.com/client/jav.../IHistory.html
    بحيث يفهم وظائفها كما هي ثم يترجمها الى اي لغة اخرى
    آخر تعديل بواسطة فيلسوف البادية ، 19-11-2017 الساعة 04:00 PM

  6. #6
    الصورة الرمزية sal_moh85
    sal_moh85 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Apr 2016
    الإقامة
    الإمارات العربية المتحدة
    العمر
    38
    المشاركات
    125

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة فيلسوف البادية مشاهدة المشاركة
    اسرع حل بالنسبة لك هو ان تكون من خبرتك فاهم هدف البرنامج اعلاه وبالتالي اعادة برمجة لما تفهمه
    ولكن اي مبرمج هنا اذا هذه الامور ليست واضحة لك لابد يعود للمرجع:
    https://www.dukascopy.com/client/jav.../IHistory.html
    بحيث يفهم وظائفها كما هي ثم يترجمها الى اي لغة اخرى
    وصلت لي استراتيجية هاد الرابط تبعها
    https://www.dukascopy.com/fxcomm/fx-...85&language=ar
    الاستراتيجيه دنميكيه فكرة تحديد lot عن طريق معدل حركة اليوم ATR فكره جديده ولا مره صادفتها وتحديد الهدف عن طريق نسبه مئويه من معدل الحركه اليوميه وفيها كتير شغلة جديده

  7. #7
    تاريخ التسجيل
    Jul 2011
    الإقامة
    السعودية
    المشاركات
    11,147

    افتراضي

    روعة JFOREX --- عندهم دالة كافة السيولة الموجودة سواء للعرض او للطلب + ايضا خاصية سيولة كل مستوى سعري عرض وطلب

    ===

    ردك الاخير اخي اذا تبي جواب دقيق وعاجل لايكفي--لابد تفصلها اذا كنت فاهمها---لانك حكمت انها ممتازة--وبالتالي اكيد فاهمها 100%

  8. #8
    تاريخ التسجيل
    Jul 2011
    الإقامة
    السعودية
    المشاركات
    11,147

    افتراضي

    يعتمدون القوالب الجاهزة تحت ال Data Structure
    مثلا نحت تعونا على انواع بيانات صحيح وعشري ولون الخ
    عندهم مكبوسة مع بعض لكل معطى وبالتالي من خلال المراجع تفك شفرتها

    سأستعرض ابرز الانواع المستخدمة بداء من السوبر super-interfaces وحتى الفروع Subinterfaces:


    اولا اي مبتدئ لهذه اللغة لابد يفهم دوال البارات السعرية: الاسك والبد الخ---وكيف يحصل عليها وهي تحت ITimedData --- التي تشبه timeseris data في الميتا
    تعتبر: Superinterfaces -- يعني منها تنبثق اشياء كثيرة وهي لاتنبثق من اي شيء--هي حجر اساس
    بناتها Subinterfaces هي:
    IBar, ILineBreak, IPointAndFigure, IPriceAggregationBar, IRangeBar, IRenkoBar, ITick, ITickBar

  9. #9
    تاريخ التسجيل
    Jul 2011
    الإقامة
    السعودية
    المشاركات
    11,147

    افتراضي

    Ibar في الاعلى متغير مكبوس,
    يعني متغير يجمع تحته عدة متغيرات اساسيىة---متغيرات اساسية يعين عشري مثل السعر نصي مثل اسم الزوج عدد صحيح مثل الفوليوم----كابسينها مع بعض لكل بارة

    فجعلوا النوع bar مسبوقة ب i ----نوع هم اخترعوه

  10. #10
    تاريخ التسجيل
    Jul 2011
    الإقامة
    السعودية
    المشاركات
    11,147

    افتراضي

    ITick
    التي تكررت في برنامجك اخي, ايضا متغير مكبوس تحت عدة متغيرات اساسية لها علاقة بالتكات

    مكبوس تحته 10 متغيرات تعودنا على اكثرها في الميتا وهي:

  11. #11
    تاريخ التسجيل
    Jul 2011
    الإقامة
    السعودية
    المشاركات
    11,147

    افتراضي

    لاحظ اخي هذه الاسطر من برنامجك
    انواع مكبوسة
    يعني مسألة ثقافة معرفتها
    كود PHP:
    private IEngine engine
        private 
    IConsole console
        private 
    IHistory history
        private 
    IContext context
        private 
    IIndicators indicators
        private 
    IUserInterface userInterface
    IContext --- مثلا علمنا انها نوع كبس من معرفة مبادئ الجافا ولكن هي ليست اساسية بل مخترع بشري تحته عدة متغيرات اساسية؟؟
    ماهي؟
    ج: مسألة ثقافة--لابد نرجع للمانوال


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17