diff --git a/assignments/lambda-classes.js b/assignments/lambda-classes.js index 71acfca0e..d50ac4948 100644 --- a/assignments/lambda-classes.js +++ b/assignments/lambda-classes.js @@ -1 +1,166 @@ // CODE here for your Lambda Classes +class Person { + constructor(attrs) { + this.name = attrs.name; + this.age = attrs.age; + this.location = attrs.location; + } + + speak() { + return `Hello my name is ${this.name}, I am from ${this.location}.`; + } +} + +class Instructor extends Person { + constructor(attrs) { + super(attrs); + this.specialty = attrs.specialty; + this.favLanguage = attrs.favLanguage; + this.catchPhrase = attrs.catchPhrase; + } + + demo(subject) { + return `Today we are learning about ${subject}.`; + } + + grade(student, subject) { + return `${student.name} receives a perfect score on ${subject}.`; + } +} + +class Student extends Person { + constructor(attrs) { + super(attrs); + this.previousBackground = attrs.previousBackground; + this.className = attrs.className; + this.favSubjects = attrs.favSubjects; + } + + listsSubjects() { + let str = ""; + + this.favSubjects.forEach((favSubject, index, array) => { + if (index !== array.length - 1) { + str += `${favSubject}, `; + } else { + str += `${favSubject}`; + } + }); + + return str; + } + + PRAssignment(subject) { + return `${this.name} has submitted a PR for ${subject}.`; + } + + sprintChallenge(subject) { + return `${this.name} has begun sprint challenge on ${subject}.`; + } +} + +class ProjectManager extends Instructor { + constructor(attrs) { + super(attrs); + this.gradClassName = attrs.gradClassName; + this.favInstructor = attrs.favInstructor; + } + + standUp(channel) { + return `${this.name} announces to #${channel}, @channel stand up times!`; + } + + debugsCode(student, subject) { + return `${this.name} debugs ${student.name}'s code on ${subject}.`; + } +} + +const adam = new Instructor({ + name: "Adam", + age: 37, + location: "New York", + specialty: "Front-End", + favLanguage: "CSS", + catchPhrase: "Let's get ready to rumble!" +}); + +console.log(adam.name); + +console.log(adam.catchPhrase); + +console.log(adam.speak()); + +console.log(adam.demo("HTML")); + +const carlos = new Student({ + name: "Carlos", + age: 28, + location: "Chicago", + previousBackground: "Marketer", + className: "WEB PT 9", + favSubjects: ["React, HTML, GraphQL"] +}); + +console.log(carlos.name); + +console.log(carlos.previousBackground); + +console.log(carlos.listsSubjects()); + +console.log(carlos.PRAssignment("React")); + +const bob = new Instructor({ + name: "Bob", + age: 33, + location: "San Francisco", + specialty: "React", + favLanguage: "JavaScript", + catchPhrase: "Boom Shakalah!" +}); + +console.log(bob.grade(carlos, "React")); + +const david = new Student({ + name: "David", + age: 22, + location: "Seattle", + previousBackground: "Teacher", + className: "WEB PT 9", + favSubjects: ["CSS, JavaScript, React"] +}); + +console.log(david.sprintChallenge("CSS")); + +const edgar = new ProjectManager({ + name: "Edgar", + age: 44, + location: "Houston", + specialty: "Back-End", + favLanguage: "PHP", + catchPhrase: "That's straight fire!", + gradClassName: "WEB PT 9", + favInstructor: "Bob" +}); + +console.log(edgar.age); + +console.log(edgar.favLanguage); + +console.log(edgar.favInstructor); + +console.log(edgar.grade(david, "PHP")); + +console.log(edgar.standUp("webpt9")); + +const frank = new ProjectManager({ + name: "Frank", + age: 52, + location: "Los Angeles", + specialty: "Back-End", + favLanguage: "GraphQL", + catchPhrase: "No pain, no gain!", + gradClassName: "WEB PT 9", + favInstructor: "Bob" +}); + +console.log(frank.debugsCode(adam, "GraphQL")); diff --git a/assignments/prototype-refactor.js b/assignments/prototype-refactor.js index 91424c9fa..bd2074308 100644 --- a/assignments/prototype-refactor.js +++ b/assignments/prototype-refactor.js @@ -7,3 +7,140 @@ Prototype Refactor 2. Your goal is to refactor all of this code to use ES6 Classes. The console.log() statements should still return what is expected of them. */ + +/* + Object oriented design is commonly used in video games. For this part of the assignment you will be implementing several constructor functions with their correct inheritance hierarchy. + + In this file you will be creating three constructor functions: GameObject, CharacterStats, Humanoid. + + At the bottom of this file are 3 objects that all end up inheriting from Humanoid. Use the objects at the bottom of the page to test your constructor functions. + + Each constructor function has unique properties and methods that are defined in their block comments below: +*/ + +/* + === GameObject === + * createdAt + * name + * dimensions (These represent the character's size in the video game) + * destroy() // prototype method that returns: `${this.name} was removed from the game.` +*/ + +class GameObject { + constructor(attrs) { + this.createdAt = attrs.createdAt; + this.name = attrs.name; + this.dimensions = attrs.dimensions; + } + + destroy() { + return `${this.name} was removed from the game.`; + } +} + +/* + === CharacterStats === + * healthPoints + * takeDamage() // prototype method -> returns the string ' took damage.' + * should inherit destroy() from GameObject's prototype +*/ + +class CharacterStats extends GameObject { + constructor(attrs) { + super(attrs); + this.healthPoints = attrs.healthPoints; + } + + takeDamage() { + return `${this.name} took damage.`; + } +} + +/* + === Humanoid (Having an appearance or character resembling that of a human.) === + * team + * weapons + * language + * greet() // prototype method -> returns the string ' offers a greeting in .' + * should inherit destroy() from GameObject through CharacterStats + * should inherit takeDamage() from CharacterStats +*/ + +class Humanoid extends CharacterStats { + constructor(attrs) { + super(attrs); + this.team = attrs.team; + this.weapons = attrs.weapons; + this.language = attrs.language; + } + + greet() { + return `${this.name} offers a greeting in ${this.language}.`; + } +} + +/* + * Inheritance chain: GameObject -> CharacterStats -> Humanoid + * Instances of Humanoid should have all of the same properties as CharacterStats and GameObject. + * Instances of CharacterStats should have all of the same properties as GameObject. + */ + +// Test you work by un-commenting these 3 objects and the list of console logs below: + +const mage = new Humanoid({ + createdAt: new Date(), + dimensions: { + length: 2, + width: 1, + height: 1 + }, + healthPoints: 5, + name: "Bruce", + team: "Mage Guild", + weapons: ["Staff of Shamalama"], + language: "Common Tongue" +}); + +const swordsman = new Humanoid({ + createdAt: new Date(), + dimensions: { + length: 2, + width: 2, + height: 2 + }, + healthPoints: 15, + name: "Sir Mustachio", + team: "The Round Table", + weapons: ["Giant Sword", "Shield"], + language: "Common Tongue" +}); + +const archer = new Humanoid({ + createdAt: new Date(), + dimensions: { + length: 1, + width: 2, + height: 4 + }, + healthPoints: 10, + name: "Lilith", + team: "Forest Kingdom", + weapons: ["Bow", "Dagger"], + language: "Elvish" +}); + +console.log(mage.createdAt); // Today's date +console.log(archer.dimensions); // { length: 1, width: 2, height: 4 } +console.log(swordsman.healthPoints); // 15 +console.log(mage.name); // Bruce +console.log(swordsman.team); // The Round Table +console.log(mage.weapons); // Staff of Shamalama +console.log(archer.language); // Elvish +console.log(archer.greet()); // Lilith offers a greeting in Elvish. +console.log(mage.takeDamage()); // Bruce took damage. +console.log(swordsman.destroy()); // Sir Mustachio was removed from the game. + +// Stretch task: +// * Create Villain and Hero constructor functions that inherit from the Humanoid constructor function. +// * Give the Hero and Villains different methods that could be used to remove health points from objects which could result in destruction if health gets to 0 or drops below 0; +// * Create two new objects, one a villain and one a hero and fight it out with methods!