Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Гляньте код скажите что сделано не грамотно? С точки зрения ООП 
:(
    Опции темы
QryStaL
Дата 6.8.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 10
Всего: 32





--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
source777
Дата 6.8.2008, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 3
Всего: 56



Цитата(WaReZMEN @  6.8.2008,  14:12 Найти цитируемый пост)
source777, а де лучше о  паттерн State  почитать??? 

В книгах по ООА/П, а для начала и статья сгодится...




--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Skynin
Дата 6.8.2008, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: 0
Всего: 10



Не об ООП, но нехорошо:

Код

if (ObjectList[i] is TImpost)
     {
         if ((ObjectList[i] as TImpost).isSelected) 



потому что дважды производится преобразование к типу.

Нужно:

Код

TImpost tempTI = ObjectList[i] as TImpost;
if (tempTI != null)
     {
         if (tempTI.isSelected) 




Подробности:

As is или история о том как не надо писать код
PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
source777
Дата 6.8.2008, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 3
Всего: 56



Цитата(Skynin @  6.8.2008,  20:02 Найти цитируемый пост)
потому что дважды производится преобразование к типу.
да нет, это нехорошо совсем по другой причине: тут вообще в приведении типов никакой надобности нет, а в твоём варианте оно осталось! надобности нет и в публичном свойстве isSelected, это все детали реализации класса и на показ их незачем выставлять, эту логику необходимо перенести в свойство, возвращающее цвет в зависимости от состояния.



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
WaReZMEN
Дата 7.8.2008, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



source777
Цитата(source777 @  7.8.2008,  04:21 Найти цитируемый пост)
надобности нет и в публичном свойстве isSelected, это все детали реализации класса и на показ их незачем выставлять, эту логику необходимо перенести в свойство, возвращающее цвет в зависимости от состояния


Я вот подумывал об этом но теперь точно именно так и сделаю... smile
PM MAIL ICQ   Вверх
WaReZMEN
Дата 7.8.2008, 04:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Вот последняя версия на текущий момент
класс
Код

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace Prog
{
   public enum Const
    {
        none = 0,
        ptPROFILE_LEFT = 1,
        ptPROFILE_TOP = 2,
        ptPROFILE_RIGHT = 3,
        ptPROFILE_BOTTOM = 4,
        alCenter = 10,
        alBottom = 11,
        alLeft = 12,
        alRigth = 13,
        alTop = 14,
        imHorizontal = 100,
        imVertical = 101,
        stMouseDown=201

    }

   public class MngConstruction 
   {    
        private int Otstup = 10;
        public TConstraction MainConstr;

        public int Width;
        public int Height;
        public Point mousepoint;
        public Const mousestatus=Const.none;
         

//        public ArrayList ObjectList = new ArrayList();
        public List<TConstructionElement> ObjectList = new List<TConstructionElement>();
        public MngConstruction(int W, int H)
        {
            this.Width = W;
            this.Height = H;
            this.MainConstr = new TConstraction(Otstup, Otstup, this.Width + Otstup, this.Height + Otstup, this);
        }

        public Point MousePoint
        {
            get
            {
                return mousepoint;
            }
            set
            {
                mousepoint = value;
                
                SelectObject();
                if ((mousestatus == Const.imHorizontal) || (mousestatus == Const.imVertical))
                {
                    this.DropImpost(mousestatus);
                    mousestatus = Const.none;
                }

            }
        }

        public Const MouseStatus
        {
            get { return mousestatus; }
            set { mousestatus = value;}
        }       

        public void Paint(Graphics PanelGraphics)
        {
            SolidBrush myBrush = new SolidBrush(Color.Yellow);
            SolidBrush myFill = new SolidBrush(Color.Yellow);
            Pen LinePen = new Pen(Color.Black);

            for (int i = 0; i < ObjectList.Count; i++)
            {
                myBrush.Color = ObjectList[i].ActivColor;
                myFill.Color=ObjectList[i].ActivColor;
                PanelGraphics.FillPolygon(myBrush, ObjectList[i].maspoints);
                PanelGraphics.DrawPolygon(LinePen, ObjectList[i].maspoints);
            }

            LinePen.Dispose();
            myBrush.Dispose();
            myFill.Dispose();
        }

        public void SelectObject()
         {
             this.Deselect();
             for (int i = ObjectList.Count - 1; i >= 0; i--)
                 {                   
                     GraphicsPath path = new GraphicsPath();
                     path.AddPolygon(ObjectList[i].maspoints);

                     Region Reg = new Region(path);
                     if (Reg.IsVisible(this.MousePoint) == true)
                     {
                         ObjectList[i].isSelected = true;
                         break;
                     }
                     else
                         ObjectList[i].isSelected = false;
                     path.Dispose();
                     Reg.Dispose();
                 }
         }

        public void Deselect()
        {

            for (int i = ObjectList.Count - 1; i >= 0; i--)
            {
                if (ObjectList[i].isSelected) ObjectList[i].isSelected = false;
            }
        }

        public void DropImpost(Const ImpostType)
        {
            TInfill tmpInfill;
            for (int i = ObjectList.Count - 1; i >= 0; i--)
            {
              if (ObjectList[i] is TInfill)
                 if (ObjectList[i].isSelected)
                     {


                         tmpInfill = (ObjectList[i] as TInfill);

                         tmpInfill.Impost = new TImpost(ImpostType, tmpInfill, tmpInfill.Parent);
                            if (ImpostType == Const.imVertical)
                            {
                                tmpInfill.Infill1 = new TInfill(Const.alLeft, tmpInfill.Parent);
                                tmpInfill.Infill1.parentInfill = tmpInfill;
                                tmpInfill.Infill1.Recalc();
                                tmpInfill.Infill2 = new TInfill(Const.alRigth, tmpInfill.Parent);
                                tmpInfill.Infill2.parentInfill = tmpInfill;
                                tmpInfill.Infill2.Recalc();
                            }
                            else
                                if (ImpostType == Const.imHorizontal)
                                {
                                    tmpInfill.Infill1 = new TInfill(Const.alTop, tmpInfill.Parent);
                                    tmpInfill.Infill1.parentInfill = tmpInfill;
                                    tmpInfill.Infill1.Recalc();
                                    tmpInfill.Infill2 = new TInfill(Const.alBottom, tmpInfill.Parent);
                                    tmpInfill.Infill2.parentInfill = tmpInfill;
                                    tmpInfill.Infill2.Recalc();
                                }
                            break;
                       


                    }
            }
            
        }

        public void MoveImpost(Point NewPosImpost)
        {
            for (int i = ObjectList.Count - 1; i >= 0; i--)
            {
                if (ObjectList[i] is TImpost)
                    if (ObjectList[i].isSelected)
                    {
                        (ObjectList[i] as TImpost).X = NewPosImpost.X;
                        (ObjectList[i] as TImpost).Y = NewPosImpost.Y;
                        (ObjectList[i] as TImpost).Recalc();
                        (ObjectList[i] as TImpost).parentinfill.Infill1.Recalc();
                        (ObjectList[i] as TImpost).parentinfill.Infill2.Recalc();                         
                         break;
                    }
            }
        }

        
   }

   public class TConstraction : TConstructionElement
    {

        public MngConstruction ParentMngConst;

        private TProfil Profil_Left;
        private TProfil Profil_Top;
        private TProfil Profil_Right;
        private TProfil Profil_Bottom;
        private TInfill Infill;

        public TConstraction() { }
        public TConstraction(int StartX, int StartY, int W, int H, MngConstruction ParentMngConstruction) 
        {
            this.ParentMngConst = ParentMngConstruction;
            this.BeginOrdinate.X = StartX; 
            this.BeginOrdinate.Y = StartY; 
            this.EndOrdinate.X = BeginOrdinate.X + W; 
            this.EndOrdinate.Y = BeginOrdinate.Y + H;      

            this.Profil_Left = new TProfil(Const.ptPROFILE_LEFT, this);
            this.Profil_Top = new TProfil(Const.ptPROFILE_TOP, this);
            this.Profil_Right = new TProfil(Const.ptPROFILE_RIGHT, this);
            this.Profil_Bottom = new TProfil(Const.ptPROFILE_BOTTOM, this);
            this.Infill = new TInfill(Const.alCenter, this);
            this.Infill.Recalc();
            this.ParentMngConst.ObjectList.Add(this);
        }

        

    }

   public class TProfil : TConstructionElement
    {
       private Const profiltype;

       public TProfil(Const ProfilType, TConstraction ParentConstraction)
        {
            this.Parent = ParentConstraction;
            
            this.profiltype = ProfilType;
            this.Recalc();
            this.Parent.ParentMngConst.ObjectList.Add(this);
        }
 

        private void Recalc()
        {
            switch (profiltype)
            {
                case Const.ptPROFILE_LEFT:
                        this.maspoints[0] = new Point(Parent.BeginOrdinate.X, Parent.BeginOrdinate.Y);
                        this.maspoints[1] = new Point(Parent.BeginOrdinate.X + Fat, Parent.BeginOrdinate.Y + Fat);
                        this.maspoints[2] = new Point(Parent.BeginOrdinate.X + Fat, Parent.BeginOrdinate.Y + Parent.EndOrdinate.Y - Fat);
                        this.maspoints[3] = new Point(Parent.BeginOrdinate.X, Parent.BeginOrdinate.Y + Parent.EndOrdinate.Y);
                     break;
                case Const.ptPROFILE_TOP:
                        this.maspoints[0] = new Point(Parent.BeginOrdinate.X, Parent.BeginOrdinate.Y);
                        this.maspoints[1] = new Point(Parent.BeginOrdinate.X + Parent.EndOrdinate.X, Parent.BeginOrdinate.Y);
                        this.maspoints[2] = new Point(Parent.BeginOrdinate.X + Parent.EndOrdinate.X - Fat, Parent.BeginOrdinate.Y + Fat);
                        this.maspoints[3] = new Point(Parent.BeginOrdinate.X + Fat, Parent.BeginOrdinate.Y + Fat);
                     break;
                case Const.ptPROFILE_RIGHT:
                        this.maspoints[0] = new Point(Parent.BeginOrdinate.X + Parent.EndOrdinate.X - Fat, Parent.BeginOrdinate.Y + Fat);
                        this.maspoints[1] = new Point(Parent.BeginOrdinate.X + Parent.EndOrdinate.X, Parent.BeginOrdinate.Y);
                        this.maspoints[2] = new Point(Parent.BeginOrdinate.X + Parent.EndOrdinate.X, Parent.BeginOrdinate.Y + Parent.EndOrdinate.Y);
                        this.maspoints[3] = new Point(Parent.BeginOrdinate.X + Parent.EndOrdinate.X - Fat, Parent.BeginOrdinate.Y + Parent.EndOrdinate.Y - Fat);
                     break;
                case Const.ptPROFILE_BOTTOM:
                        this.maspoints[0] = new Point(Parent.BeginOrdinate.X, Parent.BeginOrdinate.Y + Parent.EndOrdinate.Y);
                        this.maspoints[1] = new Point(Parent.BeginOrdinate.X + Parent.EndOrdinate.X, Parent.BeginOrdinate.Y + Parent.EndOrdinate.Y);
                        this.maspoints[2] = new Point(Parent.BeginOrdinate.X + Parent.EndOrdinate.X - Fat, Parent.BeginOrdinate.Y + Parent.EndOrdinate.Y - Fat);
                        this.maspoints[3] = new Point(Parent.BeginOrdinate.X + Fat, Parent.BeginOrdinate.Y + Parent.EndOrdinate.Y - Fat);
                     break;
            }

        }

    }

   public class TInfill : TConstructionElement 
   {
       private Const infillalign;
       public TImpost Impost;
       public TInfill Infill1;
       public TInfill Infill2;
       public TInfill parentInfill;

       public TInfill(Const InfillAlign, TConstraction ParentConstraction)
       {
           this.infillalign = InfillAlign;
           this.Parent = ParentConstraction;

           this.Parent.ParentMngConst.ObjectList.Add(this);
           
           this.DeselectColor = Color.FromArgb(213, 235, 255);
           this.SelectColor = Color.FromArgb(255, 227, 191);
           this.ActivColor = this.DeselectColor;
       }

       public void Recalc()
       {   
           TConstraction c;
           TImpost imp;
           TInfill inf;
           switch (infillalign)
           {               
               case Const.alCenter:
                        c = this.Parent;
                        this.maspoints[0] = new Point(c.BeginOrdinate.X + Fat, c.BeginOrdinate.Y + Fat);
                        this.maspoints[1] = new Point(c.BeginOrdinate.X + c.EndOrdinate.X - Fat, c.BeginOrdinate.Y + Fat);
                        this.maspoints[2] = new Point(c.BeginOrdinate.X + c.EndOrdinate.X - Fat, c.BeginOrdinate.Y + c.EndOrdinate.Y - Fat);
                        this.maspoints[3] = new Point(c.BeginOrdinate.X + Fat, c.BeginOrdinate.Y + c.EndOrdinate.Y - Fat);
                        this.BeginOrdinate = this.maspoints[0];
                        this.EndOrdinate = this.maspoints[2];
                        this.Width = this.maspoints[1].X - this.maspoints[0].X;
                        this.Height = this.maspoints[3].Y - this.maspoints[0].Y;
                   break;
               case Const.alLeft:
                   imp = this.parentInfill.Impost;
                   inf = this.parentInfill;
                   this.maspoints[0] = new Point(inf.BeginOrdinate.X, inf.BeginOrdinate.Y);
                   this.maspoints[1] = new Point(imp.BeginOrdinate.X, imp.BeginOrdinate.Y);
                   this.maspoints[2] = new Point(imp.BeginOrdinate.X, inf.EndOrdinate.Y);
                   this.maspoints[3] = new Point(inf.BeginOrdinate.X, inf.EndOrdinate.Y);
                   this.BeginOrdinate = this.maspoints[0];
                   this.EndOrdinate = this.maspoints[2];
                   this.Width = this.maspoints[1].X - this.maspoints[0].X;
                   this.Height = this.maspoints[3].Y - this.maspoints[0].Y;  
                   break;
               case Const.alTop:
                   imp = this.parentInfill.Impost;
                   inf = this.parentInfill;
                   this.maspoints[0] = new Point(inf.BeginOrdinate.X, inf.BeginOrdinate.Y);
                   this.maspoints[1] = new Point(inf.EndOrdinate.X, inf.BeginOrdinate.Y);
                   this.maspoints[2] = new Point(imp.EndOrdinate.X, imp.BeginOrdinate.Y);
                   this.maspoints[3] = new Point(imp.BeginOrdinate.X, imp.BeginOrdinate.Y);
                   this.BeginOrdinate = this.maspoints[0];
                   this.EndOrdinate = this.maspoints[2];
                   this.Width = this.maspoints[1].X - this.maspoints[0].X;
                   this.Height = this.maspoints[3].Y - this.maspoints[0].Y;
                   break;
               case Const.alRigth:
                   imp = this.parentInfill.Impost;
                   inf = this.parentInfill;
                   this.maspoints[0] = new Point(imp.EndOrdinate.X, imp.BeginOrdinate.Y);
                   this.maspoints[1] = new Point(inf.EndOrdinate.X, inf.BeginOrdinate.Y);
                   this.maspoints[2] = new Point(inf.EndOrdinate.X, inf.EndOrdinate.Y);
                   this.maspoints[3] = new Point(imp.EndOrdinate.X, imp.EndOrdinate.Y);
                   this.BeginOrdinate = this.maspoints[0];
                   this.EndOrdinate = this.maspoints[2];
                   this.Width = this.maspoints[1].X - this.maspoints[0].X;
                   this.Height = this.maspoints[3].Y - this.maspoints[0].Y;
                   break;
               case Const.alBottom:
                   imp = this.parentInfill.Impost;
                   inf = this.parentInfill;
                   this.maspoints[0] = new Point(imp.BeginOrdinate.X, imp.EndOrdinate.Y);
                   this.maspoints[1] = new Point(imp.EndOrdinate.X, imp.EndOrdinate.Y);
                   this.maspoints[2] = new Point(inf.EndOrdinate.X, inf.EndOrdinate.Y);
                   this.maspoints[3] = new Point(imp.BeginOrdinate.X, inf.EndOrdinate.Y);
                   this.BeginOrdinate = this.maspoints[0];
                   this.EndOrdinate = this.maspoints[2];
                   this.Width = this.maspoints[1].X - this.maspoints[0].X;
                   this.Height = this.maspoints[3].Y - this.maspoints[0].Y;
                   break;
           }
           if (this.Impost != null) this.Impost.Recalc();
           if (this.Infill1 != null) this.Infill1.Recalc();
           if (this.Infill2 != null) this.Infill2.Recalc();


       }


   }
  
   public class TImpost : TConstructionElement
   {
       private Const imposttype;
       public TInfill parentinfill;
       public int X;
       public int Y;

       public TImpost(Const ImpostType, TInfill ParentInfill, TConstraction ParentConstraction)
       {
           this.Parent = ParentConstraction;
           this.parentinfill = ParentInfill;
           this.X = Parent.ParentMngConst.MousePoint.X;
           this.Y = Parent.ParentMngConst.MousePoint.Y;
           this.imposttype = ImpostType;
           this.Recalc();
           this.Parent.ParentMngConst.ObjectList.Add(this);
       }

       public void Recalc()
       {
           switch (this.imposttype)
           {
               case Const.imVertical:
                   this.maspoints[0] = new Point(X - (Fat / 2), parentinfill.BeginOrdinate.Y);
                   this.maspoints[1] = new Point(X + (Fat / 2), parentinfill.BeginOrdinate.Y);
                   this.maspoints[2] = new Point(X + (Fat / 2), parentinfill.BeginOrdinate.Y + parentinfill.Height);
                   this.maspoints[3] = new Point(X - (Fat / 2), parentinfill.BeginOrdinate.Y + parentinfill.Height);
                   this.BeginOrdinate = this.maspoints[0];
                   this.EndOrdinate = this.maspoints[2];
                   this.Width = this.maspoints[1].X - this.maspoints[0].X;
                   this.Height = this.maspoints[3].Y - this.maspoints[0].Y;
                   break;
               case Const.imHorizontal:
                   this.maspoints[0] = new Point(parentinfill.BeginOrdinate.X, Y - (Fat / 2));
                   this.maspoints[1] = new Point(parentinfill.EndOrdinate.X, Y - (Fat / 2));
                   this.maspoints[2] = new Point(parentinfill.EndOrdinate.X, Y + (Fat / 2));
                   this.maspoints[3] = new Point(parentinfill.BeginOrdinate.X, Y + (Fat / 2));
                   this.BeginOrdinate = this.maspoints[0];
                   this.EndOrdinate = this.maspoints[2];
                   this.Width = this.maspoints[1].X - this.maspoints[0].X;
                   this.Height = this.maspoints[3].Y - this.maspoints[0].Y;
                   break;
           }
       }

   }

   public class TConstructionElement
   {
       private int fat = 28;
       private Boolean selected = false;
       private TConstraction parent;       
       private int width;
       private int height;

       public Point BeginOrdinate;
       public Point EndOrdinate;
       public Point[] maspoints = new Point[4];

       public Color SelectColor = Color.FromArgb(182, 209, 255);
       public Color DeselectColor=Color.FromArgb(250, 250, 250);
       public Color ActivColor;
       
       

       public int Fat
       {
           get    { return fat;   }
           set { fat = value;  }
       }
       public Boolean isSelected
       {
           get { return selected;
               if (selected == true) ActivColor = SelectColor; else ActivColor = DeselectColor;
                 }
           set  {  selected = value;
               if (selected == true) ActivColor = SelectColor; else ActivColor = DeselectColor;       
                 }
       }
       public TConstraction Parent
       {
           get  {   return parent; }
           set {     parent = value; }
       }
       public int Width
       {
           get {  return width; }
           set {  width = value; }
       }
       public int Height
       {
           get { return height; }
           set  { height = value; }
       }
   }


 }

 

Вот форма

Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Prog
{
    public partial class FMain : Form
    {
        MngConstruction ConMng;

        public FMain()
        {
            InitializeComponent();
        }

        private void FMain_Paint(object sender, PaintEventArgs e)            
        {
            ConMng.Paint(e.Graphics);            
        }

        private void FMain_MouseDown(object sender, MouseEventArgs e)
        {
            if((ConMng.MouseStatus != Const.imHorizontal) & (ConMng.MouseStatus != Const.imVertical))
               ConMng.MouseStatus = Const.stMouseDown;
            ConMng.MousePoint = e.Location;
            Refresh();            
        }

        private void FMain_Load(object sender, EventArgs e)
        {
            ConMng = new MngConstruction(300, 400);            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ConMng.MouseStatus = Const.imVertical;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            ConMng.MouseStatus = Const.imHorizontal;
        }

        private void FMain_MouseMove(object sender, MouseEventArgs e)
        {
            if (ConMng.MouseStatus == Const.stMouseDown)
            {
                ConMng.MoveImpost(e.Location);
                Text = "X=" + e.Location.X.ToString() + " Y=" + e.Location.Y.ToString();
                Refresh();
            }
        }

        private void FMain_MouseUp(object sender, MouseEventArgs e)
        {
            ConMng.MouseStatus = Const.none;
        }

    }
}


PM MAIL ICQ   Вверх
source777
Дата 7.8.2008, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 3
Всего: 56



Цитата(WaReZMEN @  7.8.2008,  04:17 Найти цитируемый пост)
   public enum Const
    {
        none = 0,
        ptPROFILE_LEFT = 1,
        ptPROFILE_TOP = 2,
        ptPROFILE_RIGHT = 3,
        ptPROFILE_BOTTOM = 4,
        alCenter = 10,
        alBottom = 11,
        alLeft = 12,
        alRigth = 13,
        alTop = 14,
        imHorizontal = 100,
        imVertical = 101,
        stMouseDown=201
    }

Я вот не пойму ты - совсем ку-ку или прикидываешься? Какой семантический смысл у твоего enum Const ??? Это безумная свалка констант, а не перечисление получилась...

P.S. Работа над ошибками не проведена, по прежнему не используется ООП, вообщем крепкая двойка за код!


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Partizan
Дата 7.8.2008, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



ггг ) из одного этого безумного enum-a гораздо логичнее сделать четыре,  хотя бы разделённых по смыслу )


source777, ну что вы так уж сразу двойки ставите) человек же только учится) так и желание отбить не долго...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
source777
Дата 7.8.2008, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 3
Всего: 56



Partizan, поздравляю с 1000-ым сообщением  smile 
Цитата(Partizan @  7.8.2008,  12:02 Найти цитируемый пост)
source777, ну что вы так уж сразу двойки ставите) человек же только учится) так и желание отбить не долго... 
А это промежуточная оценка, её можно и исправить, если начать думать, а не вставлять сюда каждый день здоровенные куски кода, которые друг от друга ничем концептуально не отличаются...

P.S. Лучше бы он взял маленький кусок своего кода строчек на 100 и довёл его до ума, а не плодил дурнопахнущий код... Тем более что его уже невозможно читать: все классы кроме формы в одном файле, ни единого комментария... А имена переменных - это вообще отдельный ужос, чего только myBrush стоит или tmpInfill.Infill1...


Это сообщение отредактировал(а) source777 - 7.8.2008, 13:18


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
WaReZMEN
Дата 7.8.2008, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



source777, нивижу большого отличия от 4-х enum-a... и кстате к названию просил не предиратся  смотрите первый топ....
ну я стораюсь юзать ООП но что еще осталось поскажите ....
Partizan, стараюсь двоикои меня не испугаеш... ядумаю строшнеее без ответов в теме две недели smile
PM MAIL ICQ   Вверх
source777
Дата 7.8.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 3
Всего: 56



Цитата(WaReZMEN @  7.8.2008,  13:15 Найти цитируемый пост)
к названию просил не предиратся  смотрите первый топ....
Это не придирки, это очень важный момент, а первый топ я смотрел... Жаль только, что из-за таких вот прецедентов ходят слухи, что Delphi-программисты ничего кроме  расставления кнопок по формам не умеют...

Цитата(WaReZMEN @  7.8.2008,  13:15 Найти цитируемый пост)
source777, нивижу большого отличия от 4-х enum-a...
Значит не прикидываешься...
Что значит Const.alCenter ?  С таким же успехом можно было везде в коде вместо него 10 писать! От замены магического числа на магическое слово ничего не поменялось... Ты не сможешь объявить, находясь в здравом уме, переменную типа Const!!! 
А введя перечисление Alignment, ты смог бы использовать семантически ясную запись типа: Alignment.Center.

Цитата(WaReZMEN @  7.8.2008,  13:15 Найти цитируемый пост)
ну я стораюсь юзать ООП но что еще осталось поскажите ....
Да всё осталось... ты же ничего по сути не исправил.. только синтаксис в паре мест изменил.
90% кода, который ты сюда выкладываешь, никуда не годится, но кто ж будет тебе описывать все недоразумения 500 строк кода, если хочешь можешь выделить любой метод, и я тебе по нему конкретно накидаю кучу замечаний...
Попробуй написать с нуля, но на сей раз с учётом ООП... Потому что из запорожца мерседес всё равно не сделать...



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Partizan
Дата 7.8.2008, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



Цитата

Лучше бы он взял маленький кусок своего кода строчек на 100 и довёл его до ума


Ну раз уж на то пошло, то чтобы добиться OOP-style, надо сначала спроектировать приложение, выделить сущности, взаимоотношения между ними..use cases нарисовать в конце концов...а 100 строк доводить "до ума" смысла нет...ибо дабы приложение таки соответствовало концепции ООП, его надо пересматривать в корне и постепенно изменять в сторону ООП...то есть я говорю о том, что взор разработчика должен затрагивать всю систему в целом...как бы воспарить над ней и посмотреть сверху: а какое же оно сейчас моё приложение и какое оно должно быть...а ограничиваться 100 строками кода - эт ни к чему не приведёт smile


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
source777
Дата 7.8.2008, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 3
Всего: 56



Цитата(Partizan @  7.8.2008,  13:49 Найти цитируемый пост)
то есть я говорю о том, что взор разработчика должен затрагивать всю систему в целом...как бы воспарить над ней и посмотреть сверху: а какое же оно сейчас моё приложение и какое оно должно быть...
Ну правильно, давайте теперь на форум постить листинги по 5-50 тыс. строк и спрашивать, что в них не так с точки зрения ООП... Может всё-таки для начала нужно концепции ООП изучить на небольшом объёме кода?

P.S. А насчёт системы в целом, это UML-диаграммы надо смотреть, код для этой цели вообще не катит...


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Partizan
Дата 7.8.2008, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



source777, на самом деле топик изначально некорректно задан)


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
source777
Дата 7.8.2008, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 3
Всего: 56



Цитата(Partizan @  7.8.2008,  14:57 Найти цитируемый пост)
source777, на самом деле топик изначально некорректно задан) 
Это точно, а в названии темы запятая пропущена и "не" отдельно написано. smile  Что уже неграмотно, а мы этот момент как-то упустили из виду...



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1433 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.