Machine birth mechanism

Μπορεί μια μηχανή να γεννάει;
Η απάντηση είναι περισσότερο φιλοσοφική παρά μια τεχνική εφαρμογή της ιδέας.



using System;
using System.Collections.ObjectModel;
using System.Globalization;
using System.Text;
using MachineBirthMechanism.Properties;

namespace MachineBirthMechanism
{
    public enum Gender : int
    {
        Male = 0,
        Female = 1
    }

    public class Machine
    {
        string name;
        DateTime dayOfBirth;
        Gender sex;
        Machine partner;
        Machine newBaby;
        Collection<Machine> children;
        Random random;

        Machine() {
        }
        public Machine(string name, Gender gender) {
            DayOfBirth = DateTime.Now;
            this.name = name;
            sex = gender;
        }
        public DateTime DayOfBirth {
            get { return dayOfBirth; }
            private set { dayOfBirth = value; }
        }
        public Gender Sex {
            get { return sex; }
            private set { sex = value; }
        }
        public string Name {
            get { return name; }
            set { name = value; }
        }
        public Machine Partner {
            get { return partner; }
            set { partner = value; }
        }
        public Collection<Machine> Children {
            get { return children; }
        }
        public Machine NewBaby {
            get { return newBaby; }
            private set { newBaby = value; }
        }
        public bool BornNewBaby() {
            if (partner == null) return false;
            if (children == null) children = new Collection<Machine>();
            if (random == null) random = new Random(unchecked((int)DateTime.Now.Ticks));
            NewBaby = new Machine();
            NewBaby.DayOfBirth = DateTime.Now;
            NewBaby.Name = Guid.NewGuid().ToString().Substring(0, 4);
            NewBaby.Sex = random.Next((int)Gender.Male, (int)Gender.Female + 1) == 0 ? Gender.Male : Gender.Female;
            Children.Add(NewBaby);
            return true;
        }
        public override string ToString() {
            StringBuilder elements = new StringBuilder();
            elements.AppendLine(FormatElements(this));
            if (partner != null) elements.AppendLine(FormatElements(partner));
            elements.AppendLine();
            if (children != null) {
                foreach (Machine child in children)
                    elements.AppendLine(FormatElements(child));
            }
            return elements.ToString();
        }
        static string FormatElements(Machine machine) {
            return string.Format(CultureInfo.CurrentCulture, Resources.FormatElements, machine.Name, machine.Sex, machine.DayOfBirth);
        }
    }
}

 

Και ένα παράδειγμα


using System;

namespace MachineBirthMechanism
{
    internal class Program
    {
        static void Main() {
            Machine george = new Machine("George", Gender.Male);
            george.Partner = new Machine("Foto", Gender.Female);

            if (george.BornNewBaby()) george.NewBaby.Name = george.NewBaby.Sex == Gender.Male ? "Jim" : "Rania";
            if (george.BornNewBaby()) george.NewBaby.Name = george.NewBaby.Sex == Gender.Male ? "Vag" : "Dimitra";
            if (george.BornNewBaby()) george.NewBaby.Name = george.NewBaby.Sex == Gender.Male ? "Alex" : "Matilda";

            Console.WriteLine(george.ToString());
        }
    }
}

source code