Важные понятия, которые я хочу отточить в моем понимании - PullRequest
1 голос
/ 07 декабря 2011

Итак, я программирую чуть меньше года, и я изучил некоторые части Python, PHP и Javascript. Я действительно пытаюсь стать лучшим программистом и понять теорию программирования (которая, по сути, манипулирует информацией).

По сути, кажется, что он пишет хороший код - он должен быть модульным - это уменьшает сложность программ, что, в свою очередь, облегчает их чтение и воспроизведение аналогичных эффектов. Это использует функции и классы.

В чем разница между функцией и классом? Кажется, что они оба могут передавать аргумент - я понимаю, что класс «выше» функции.

Что такое пространство имен? Чем он отличается от переменной? Структура данных? Где я могу найти ресурсы по такого рода информации? Я посмотрел в интернете, но многое похоже на гоблинг. У меня также есть бакалавр, поэтому я не собираюсь возвращаться на второй уровень. Я просто хочу стать лучшим программистом на данный момент. Я сделал достаточно «взлома», чтобы получить базовую концепцию, но теоретические основы еще не все там.

Любой совет будет полезен.

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

Хорошо, давайте перейдем сверху вниз:

Пространство имен - это логический порядок кода.

Реальная аналогия - это библиотека.Библиотека содержит все книги, но имеет смысл иметь разделы библиотеки, посвященные определенным областям, например, книги (код) по физике

Класс - это модель (почти всегда полученная из объектов реального мира), которая раскрываетфункции и свойства.Классы могут (и должны) инкапсулировать (скрывать) свойства и функции, которые разработчик не желает, чтобы другие разработчики могли получить.Обратите внимание:

public class Car{

public Car(){}//default constructor.
public Car(int tirecount){//this constructor allows initialisation of the class to some 'safe' state
    Tires = new Tire[tirecount];
}
//properties 
public Tire[] Tires{get;set}//bad. at any point you can remove a tire from the car
public bool IsStopped{get;private set;}//safe. can check if car is stoppped outside class but can only change value inside car    

    //functions (...methods)
    public Start(){//starts car
        IsStopped = false;
    }
    public Stop(){
        IsStopped = true;
    }
    public RemoveTire(int tireIndex)
    {
        if(!this.IsStopped)this.Stop();
        Tires[tireIndex].Remove();//safe to remove tire when stopped
    }
}

Чтобы получить повторное использование кода и полиморфное поведение, вы должны прочитать об интерфейсах.Интерфейсы позволяют определять контракт.Внутренняя реализация контракта может измениться, но уже определенные методы не могут быть изменены без нарушения исходного кода, который опирается на этот контракт.Дополнительные соглашения могут быть добавлены без нарушения старых реализаций.Пример:

Class Man реализует ITalk Class Dog реализует ITalk

Состояния контракта ITalk 'У меня есть функция' Speak ', т.е.

interface ITalk{
     void Speak();
}

class World
{
    List<ITalk> beings;

    public World(List<ITalk> beingsToPopulateWorldWith)
    {
        beings = beingsToPopulateWorldWith;
    }

    public void MakeAllAnimalsTalk()
    {
        foreach(var b in beings)b.Speak();//because we know all object in the beings list use the ITalk interface (contract) we KNOW that we can call .Speak(). What each ITalk does in speak is up to them but we know we can call it.
    }
}

Так что Man.Speak () может выводить«Hi» и Dog.Speak () могут выдавать «Woof».

Классы также могут расширяться, поэтому рассмотрим пример Man / Dog.Их базовый класс может быть Animal.Animal определяет IsAlive.Человек происходит от Животного, поэтому получает IsAlive, как и Собака, однако Человек может затем определить альтернативное поведение, то есть AbilityToMakeTools, чем поведение собаки.

Я обнаружил, что как только вы начинаете рассматривать классы как объекты / процессы реального мира (все можетмоделируется даже самая абстрактная «вещь»), тогда классы начинают обретать логический смысл.

HTH

1 голос
/ 07 декабря 2011

Часть проблемы с вопросом (который полиция релевантности, вероятно, вскоре закроет) заключается в том, что многие используемые вами термины имеют различное значение в зависимости от используемой языковой парадигмы.Функция в PHP отличается от функции в JavaScript.

Я рекомендую начать с «JavaScript: хорошие части» для понимания с точки зрения того, кто работает в JS.

...